Ich habe einen Datensatz, der nach einem dynamischen Wert eine bestimmte Anzahl von Zeilen ausgeblasen werden muss. Nehmen Sie den Datensatz unten zum Beispiel:SAS: Dynamisch eine bestimmte Anzahl von Zeilen kopieren
DATA HAVE;
LENGTH ID $3 COUNT 3;
INPUT ID $ COUNT;
DATALINES;
A 4
B 3
C 1
D 2
;
RUN;
ID = A 4 Reihen ausgeblasen werden muss, ID = B 3 Reihen ausgeblasen werden muss usw. Der resultierende Datensatz als solche aussehen würde (minus ein Bündel von andere Variablen ich habe):
A 1
A 2
A 3
A 4
B 1
B 2
B 3
C 1
D 1
D 2
Der folgende Code in einem Umfang funktioniert, aber ich habe Probleme dynamisch die &COUNT.
Makroeinstellung. Ich habe versucht, eine CALL SYMPUTX("COUNT",COUNT)
-Anweisung einzufügen, so dass beim Überschreiben jeder Zeile die Anzahl in das Makro gesetzt wird und die Zeile bei dieser Anzahl von Zeilen durchgebrannt wird.
** THIS CODE ONLY WORKS IF YOU SET COUNT= TO SOME VALUE **;
%MACRO LOOPOVER();
DATA WANT; SET HAVE;
DO UNTIL(LAST.ID);
BY ID;
%DO I=1 %TO &COUNT.;
COUNT = &I.; OUTPUT;
%END;
END;
RUN;
%MEND;
%LOOPOVER;
** THIS CODE DOESN'T WORK BUT I'M NOT SURE WHY?? **;
%MACRO LOOPOVER();
DATA WANT; SET HAVE;
DO UNTIL(LAST.ID);
BY ID;
CALL SYMPUTX("COUNT",COUNT); /* NEW LINE HERE */
%DO I=1 %TO &COUNT.;
COUNT = &I.; OUTPUT;
%END;
END;
RUN;
%MEND;
%LOOPOVER;
Sie brauchen eigentlich keine neue Variable. 'zählen = 1 zu zählen; Ausgabe; Ende; 'wird gut funktionieren. – Tom
Wow, ich habe das übertrieben. Danke euch beiden! – Foxer