Veröffentlicht am :
Sprachgrundlagen CREATION_INTERNE

Demonstration von DO-Schleifen und iterativer Verarbeitung

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Dieses Programm präsentiert eine Reihe progressiver Beispiele, um die Funktionsweise von Schleifen in SAS© zu verstehen. Es behandelt die grundlegende Syntax einer iterativen Schleife, den Einfluss der OUTPUT-Anweisung zur Steuerung des Schreibens von Beobachtungen, die Variationen der Inkrementierung (positiver, negativer, dezimaler Schritt), die Iteration über eine Liste spezifischer Werte, verschachtelte Schleifen sowie die bedingten Schleifen DO WHILE und DO UNTIL.
Datenanalyse

Type : CREATION_INTERNE


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!
1/*
2Demonstration: Simple Illustration of How DO Loops Work
3*/
4DATA simple1;
5 DO i = 1 to 4;
6 answer = 1 + i;
7 END;
8RUN;
9 
10PROC PRINT DATA=simple1 noobs;
11RUN;
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!
1/*
2Demonstration: Using the Output Statement
3*/
4DATA simple2;
5 DO i = 1 to 4;
6 answer = 1 + i;
7 OUTPUT;
8 END;
9RUN;
10 
11PROC PRINT DATA=simple2 noobs;
12RUN;
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!
1*Simple example #3;
2DATA simple3 (drop=i);
3 DO i = 1 to 4;
4 answer = 1 + i;
5 OUTPUT;
6 END;
7RUN;
8 
9PROC PRINT DATA=simple3 noobs;
10RUN;
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!
1*Simple example #4;
2DATA simple4 (drop=i);
3 DO i = 0 to 10 BY 2;
4 answer = 1 + i;
5 OUTPUT;
6 END;
7RUN;
8 
9PROC PRINT DATA=simple4 noobs;
10RUN;
5 Codeblock
DATA STEP Data
Erklärung :
Verwendung einer dezimalen Inkrementierung (0.25). Die Schleife iteriert feiner zwischen 0 und 10.
Kopiert!
1*Simple example #5;
2DATA simple5 (drop=i);
3 DO i = 0 to 10 BY .25;
4 answer = 1 + i;
5 OUTPUT;
6 END;
7RUN;
8 
9PROC PRINT DATA=simple5 noobs;
10RUN;
6 Codeblock
DATA STEP Data
Erklärung :
Beispiel einer dekrementellen Schleife (Countdown) unter Verwendung eines negativen Schritts (BY -1), von 10 bis 1.
Kopiert!
1*Simple example 6;
2DATA simple6 (drop=i);
3 DO i = 10 to 1 BY -1;
4 answer = 1 + i;
5 OUTPUT;
6 END;
7RUN;
8 
9PROC PRINT DATA=simple6 noobs;
10RUN;
7 Codeblock
DATA STEP Data
Erklärung :
Iteration über eine explizite Liste nicht-sequenzieller Werte (10, 12, 23, 147).
Kopiert!
1*Simple example 7;
2DATA simple7 (drop=i);
3 DO i = 10, 12, 23, 147;
4 answer = 1 + i;
5 OUTPUT;
6 END;
7RUN;
8 
9PROC PRINT DATA=simple7 noobs;
10RUN;
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!
1*Nesting do loops;
2DATA nested;
3 DO i = 1 to 10;
4 DO j = i**2;
5 OUTPUT;
6 END;
7 END;
8RUN;
9 
10PROC PRINT DATA=nested noobs;
11RUN;
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!
1*Example of using do while;
2DATA simple8;
3 DO while (answer < 11);
4 answer + 1;
5 OUTPUT;
6 END;
7RUN;
8 
9PROC PRINT DATA=simple8 noobs;
10RUN;
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!
1*Example of using do until;
2DATA simple9;
3 DO until (answer > 9);
4 answer + 1;
5 OUTPUT;
6 END;
7RUN;
8 
9PROC PRINT DATA=simple9 noobs;
10RUN;
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.