Alle Tabellen werden dynamisch mithilfe von Schleifen und Variablenzuweisungen innerhalb der DATA-Schritte erstellt.
1 Codeblock
DATA STEP Data
Erklärung : Erstellung einer Tabelle 'simple1' mit einer einfachen Schleife von 1 bis 4. Ohne eine explizite OUTPUT-Anweisung innerhalb der Schleife erfolgt das Schreiben in die Tabelle implizit am Ende des DATA-Schritts (eine einzige finale Beobachtung, die den letzten Wert von i und answer enthält).
Kopiert!
/*
Demonstration: Simple Illustration of How DO Loops Work
*/
data simple1;
do i = 1 to 4;
answer = 1 + i;
end;
run;
proc print data=simple1 noobs;
run;
1
/*
2
Demonstration: Simple Illustration of How DO Loops Work
3
*/
4
DATA simple1;
5
DO i = 1 to 4;
6
answer = 1 + i;
7
END;
8
RUN;
9
10
PROC PRINTDATA=simple1 noobs;
11
RUN;
2 Codeblock
DATA STEP Data
Erklärung : Erstellung von 'simple2'. Das Hinzufügen der OUTPUT-Anweisung innerhalb der Schleife erzwingt das Schreiben einer Beobachtung bei jeder Iteration. Die resultierende Tabelle wird daher 4 Zeilen haben.
Kopiert!
/*
Demonstration: Using the Output Statement
*/
data simple2;
do i = 1 to 4;
answer = 1 + i;
output;
end;
run;
proc print data=simple2 noobs;
run;
1
/*
2
Demonstration: Using the Output Statement
3
*/
4
DATA simple2;
5
DO i = 1 to 4;
6
answer = 1 + i;
7
OUTPUT;
8
END;
9
RUN;
10
11
PROC PRINTDATA=simple2 noobs;
12
RUN;
3 Codeblock
DATA STEP Data
Erklärung : Ähnlich dem vorherigen Beispiel, aber die Iterationsvariable 'i' wird dank der Option (drop=i) aus der finalen Tabelle entfernt.
Kopiert!
*Simple example #3;
data simple3 (drop=i);
do i = 1 to 4;
answer = 1 + i;
output;
end;
run;
proc print data=simple3 noobs;
run;
1
*Simple example #3;
2
DATA simple3 (drop=i);
3
DO i = 1 to 4;
4
answer = 1 + i;
5
OUTPUT;
6
END;
7
RUN;
8
9
PROC PRINTDATA=simple3 noobs;
10
RUN;
4 Codeblock
DATA STEP Data
Erklärung : Demonstration einer Schleife mit einer Inkrementierung (BY) von 2. Die Schleife iteriert für i = 0, 2, 4, ..., 10.
Kopiert!
*Simple example #4;
data simple4 (drop=i);
do i = 0 to 10 by 2;
answer = 1 + i;
output;
end;
run;
proc print data=simple4 noobs;
run;
1
*Simple example #4;
2
DATA simple4 (drop=i);
3
DO i = 0 to 10BY2;
4
answer = 1 + i;
5
OUTPUT;
6
END;
7
RUN;
8
9
PROC PRINTDATA=simple4 noobs;
10
RUN;
5 Codeblock
DATA STEP Data
Erklärung : Verwendung einer dezimalen Inkrementierung (0.25). Die Schleife iteriert feiner zwischen 0 und 10.
Kopiert!
*Simple example #5;
data simple5 (drop=i);
do i = 0 to 10 by .25;
answer = 1 + i;
output;
end;
run;
proc print data=simple5 noobs;
run;
1
*Simple example #5;
2
DATA simple5 (drop=i);
3
DO i = 0 to 10BY .25;
4
answer = 1 + i;
5
OUTPUT;
6
END;
7
RUN;
8
9
PROC PRINTDATA=simple5 noobs;
10
RUN;
6 Codeblock
DATA STEP Data
Erklärung : Beispiel einer dekrementellen Schleife (Countdown) unter Verwendung eines negativen Schritts (BY -1), von 10 bis 1.
Kopiert!
*Simple example 6;
data simple6 (drop=i);
do i = 10 to 1 by -1;
answer = 1 + i;
output;
end;
run;
proc print data=simple6 noobs;
run;
1
*Simple example 6;
2
DATA simple6 (drop=i);
3
DO i = 10 to 1BY -1;
4
answer = 1 + i;
5
OUTPUT;
6
END;
7
RUN;
8
9
PROC PRINTDATA=simple6 noobs;
10
RUN;
7 Codeblock
DATA STEP Data
Erklärung : Iteration über eine explizite Liste nicht-sequenzieller Werte (10, 12, 23, 147).
Kopiert!
*Simple example 7;
data simple7 (drop=i);
do i = 10, 12, 23, 147;
answer = 1 + i;
output;
end;
run;
proc print data=simple7 noobs;
run;
1
*Simple example 7;
2
DATA simple7 (drop=i);
3
DO i = 10, 12, 23, 147;
4
answer = 1 + i;
5
OUTPUT;
6
END;
7
RUN;
8
9
PROC PRINTDATA=simple7 noobs;
10
RUN;
8 Codeblock
DATA STEP Data
Erklärung : Illustration verschachtelter Schleifen. Hinweis: Die innere Schleife 'do j = i**2;' ist keine klassische iterative Schleife (kein 'to'), sie wird einmal ausgeführt, wobei der berechnete Wert j zugewiesen wird. Das OUTPUT wird bei jedem Durchlauf ausgelöst.
Kopiert!
*Nesting do loops;
data nested;
do i = 1 to 10;
do j = i**2;
output;
end;
end;
run;
proc print data=nested noobs;
run;
1
*Nesting do loops;
2
DATA nested;
3
DO i = 1 to 10;
4
DO j = i**2;
5
OUTPUT;
6
END;
7
END;
8
RUN;
9
10
PROC PRINTDATA=nested noobs;
11
RUN;
9 Codeblock
DATA STEP Data
Erklärung : Verwendung von DO WHILE. Die Bedingung wird am Anfang der Schleife ausgewertet. Wenn 'answer' ursprünglich fehlt, kann die Bedingung sofort falsch sein oder eine Initialisierung erfordern (hier initialisiert SAS implizit auf 0 für die Summenanweisung 'answer + 1', sodass die Schleife funktioniert).
Kopiert!
*Example of using do while;
data simple8;
do while (answer < 11);
answer + 1;
output;
end;
run;
proc print data=simple8 noobs;
run;
1
*Example of using do while;
2
DATA simple8;
3
DO while (answer < 11);
4
answer + 1;
5
OUTPUT;
6
END;
7
RUN;
8
9
PROC PRINTDATA=simple8 noobs;
10
RUN;
10 Codeblock
DATA STEP Data
Erklärung : Verwendung von DO UNTIL. Die Bedingung wird am Ende der Schleife ausgewertet, wodurch sichergestellt wird, dass der Code im Inneren mindestens einmal ausgeführt wird.
Kopiert!
*Example of using do until;
data simple9;
do until (answer > 9);
answer + 1;
output;
end;
run;
proc print data=simple9 noobs;
run;
1
*Example of using do until;
2
DATA simple9;
3
DO until (answer > 9);
4
answer + 1;
5
OUTPUT;
6
END;
7
RUN;
8
9
PROC PRINTDATA=simple9 noobs;
10
RUN;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.