Vergleich mit missing value in Makros
Hallo, Community,
von einer (vorher sortierten) Liste numerischer Variablen, sagen wir x_1 ... x_10 mit "missings" soll der kleinste Wert gefunden werden und in eine neue Variable x_11 geschrieben werden.
Ich habe u. a. folgenden Code probiert:
DATA a;
input x_1-x_10;
datalines;
. . . .1 .3 .5 .6 .75 .8 1.0
;
RUN;
%MACRO missp;
DATA miss;
SET a;
%LET I = 1;
%DO %WHILE (%Sysevalf(x_&i < 0)); * (1);
%LET i = %EVAL(&i+1);
%END;
%PUT &i x_&i; * (2);
x_11 = x_&i; * (3);
RUN;
%MEND miss_p;
%missp;
(1) SAS führt den Vergleich in der Bedingungsabfrage nicht wie gewollt durch. Im obigen Beispiel sollte die Schleife im 4. Durchlauf (I=4) abbrechen.
Die Kontrollausgabe (2) zeigt aber an:
1 x_1, d. h. die Bedingung ist bereits im ersten Durchlauf FALSE, wie auch das Logfile ausweist:
MLOGIC(MISS_P): %DO %WHILE(%Sysevalf(x_&i < 0)) loop beginning; condition is
FALSE. Loop will not be executed.
(Lt. Dokumentation ist ein "missing" kleiner als jeder numerische Wert.)
(3) Weiterhin funktioniert die Zuweisung des ersten "echten" Minimalwerts nicht korrekt, d. h. die Variable x_11 wird gar nicht angelegt (,bzw. wenn sie durch ein Statement x_11=0; vorher initiiert wurde, bekommt sie den Wert "missing").
Kann mir jemand meine Denkfehler überwinden helfen?
Danke und freundlichen Gruß
Meinhard Mende
