Array im Makro

Hallo...,
es geht darum, dass wir einfach nur ein Array aus einem Makro auslesen wollen. Warum wird bei folgendem Beispielcode alles ausgelesen außer q_sas3? Die Fehlermeldung besagt, dass da durch Null geteilt wird, aber das ist nicht der Fall! Die letzte Rechnung lautet dort :0.25/0.25=1, da kommt keine Null vor, nicht in der Rechnung, noch im Ergebnis!
Wo liegt das Problem? Wären dankbar für jeden Hinweis!!

VG, Jana

%let mseed=1613725287;

** nlauf = Anzahl der Simulationen, n_1=Gruppengröße 1, n_2=Gruppengröße 2 **;
** p_skript und q_skript = Wahrscheinlichkeit für ein Element in die Kategorie ** zu kommen
** kat=Kategorienanzahl

%let nlauf=10;
%let kat=3;
%let n_1=5;
%let n_2=10;

**Macro daten Anfang **;
%macro daten;

** in data a werden die einzelnen Kategorien der Gruppen belegt **;
data a;

** retain, damit immer mseed als Startwert genutzt wird **;
retain seed &mseed;

** Wahrscheinlichkeiten innerhalb der Kategorien **;
array p_skript{&kat} (0.5 0.25 0.25);
array q_skript{&kat} (0.25 0.5 0.25);

array p_sas{&kat};
array q_sas{&kat};

p_sas(1) = p_skript(1);
q_sas(1) = q_skript(1);

sump = 1;
sumq = 1;

do k=2 to &kat;
p_sas(k)=p_skript(k)/(sump-p_skript(k-1));
sump=sump-p_skript(k);
end;

do l=2 to &kat;
q_sas(l)=q_skript(l)/(sumq-q_skript(l-1));
sumq=sumq-q_skript(l);
end;

** Z-Vektor=Verteilung der Stichproben auf die Kategorien anlegen **;

array z_1{&kat};
array z_2{&kat};
run;

%mend daten;

%macro lauf;
%do s=1 %to &nlauf;
%daten;
%end;
%mend lauf;

run;

proc print data=a;
run;

Division by Zero

Hallo Jana,

hier kommt in der l-Schleife tatsächlich für l=3 eine Division by Zero vor. Ich habe das Makro mal auf das Wesentliche beschränkt, insbesondere die Makrovariablen mseed, kat und nlauf dort definiert, wo sie auch benötigt werden. Zudem ist auch das run; vor dem proc print fehl am Platze. In die Schleifen im Datastep habe ich jeweils ein put-Statement eingebaut, in dem im Log die jeweiligen BEstandteile der Gleichungen anzudrucken. Für l=3 ist sumq=0.5 und q_skript(2)=0.5, die Differenz also 0, daher der Fehler.

%macro daten(kat=3,mseed=1613725287);
** in data a werden die einzelnen Kategorien der Gruppen belegt **;
data a;

** retain, damit immer mseed als Startwert genutzt wird **;
retain seed &mseed;

** Wahrscheinlichkeiten innerhalb der Kategorien **;
array p_skript{&kat} (0.5 0.25 0.25);
array q_skript{&kat} (0.25 0.5 0.25);

array p_sas{&kat};
array q_sas{&kat};

p_sas(1) = p_skript(1);
q_sas(1) = q_skript(1);

sump = 1;
sumq = 1;

do k=2 to &kat;
/* Ausgabe der Bestandteile der Gleichung */
put k= ": " sump p_skript(k) p_skript(k);
p_sas(k)=p_skript(k)/(sump-p_skript(k-1));
sump=sump-p_skript(k-1);
end;

do l=2 to &kat;
/* Ausgabe der Bestandteile der Gleichung */
put l= ": " sumq q_skript(l) q_skript(l-1);
q_sas(l)=q_skript(l)/(sumq-q_skript(l-1));
sumq=sumq-q_skript(l);
end;

run;

%mend daten;

%macro lauf(nlauf=1);
%do s=1 %to &nlauf;
%daten;
%end;
%mend lauf;

%lauf;

Gruß
Wolfgang