Veröffentlicht am :
Aktion CREATION_INTERNE

OUTPUT-Anweisung

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Die OUTPUT-Anweisung weist SAS© an, die aktuelle Beobachtung sofort in einen SAS©-Datensatz zu schreiben und nicht erst am Ende des DATA-Schritts. Wenn kein Datensatzname in der OUTPUT-Anweisung angegeben wird, wird die Beobachtung in den oder die Datensätze geschrieben, die in der DATA-Anweisung aufgeführt sind.
Standardmäßig enthält jeder DATA-Schritt am Ende jeder Iteration eine implizite OUTPUT-Anweisung, die SAS© anweist, Beobachtungen in die zu erstellenden Datensätze zu schreiben. Das Einfügen einer expliziten OUTPUT-Anweisung in einen DATA-Schritt unterdrückt die automatische Ausgabe, und SAS© fügt eine Beobachtung nur dann einem Datensatz hinzu, wenn eine explizite OUTPUT-Anweisung ausgeführt wird. Sobald Sie jedoch eine OUTPUT-Anweisung verwenden, um eine Beobachtung in einen Datensatz zu schreiben, gibt es am Ende des DATA-Schritts keine implizite OUTPUT-Anweisung mehr. In dieser Situation schreibt ein DATA-Schritt eine Beobachtung nur dann in einen Datensatz, wenn eine explizite OUTPUT-Anweisung ausgeführt wird. Sie können die OUTPUT-Anweisung allein oder als Teil einer IF-THEN-, SELECT- oder DO-Schleifenverarbeitung verwenden.
Wenn Sie die MODIFY-Anweisung mit der OUTPUT-Anweisung verwenden, unterdrücken die REMOVE- und REPLACE-Anweisungen die implizite Schreibaktion am Ende jeder Iteration des DATA-Schritts. Wenn sowohl die OUTPUT- als auch die REPLACE- oder REMOVE-Anweisung für eine gegebene Beobachtung ausgeführt werden, führen Sie die Ausgabeaktion zuletzt aus, um die korrekte Position des Beobachtungszeigers beizubehalten.
Datenanalyse

Type : CREATION_INTERNE


Die Beispiele verwenden generierte Daten (Datalines) oder SASHELP.

1 Codeblock
DATA STEP
Erklärung :
Diese Codeausschnitte zeigen einfache Verwendungen der OUTPUT-Anweisung. Die erste Zeile schreibt die aktuelle Beobachtung. Die zweite schreibt die Beobachtung, wenn 'deptcode' größer als 2000 ist. Die dritte schreibt die Beobachtung in den Datensatz 'markup', wenn die Variable 'phone' fehlt.
Kopiert!
1/* Écrit l'observation courante dans un ensemble de données SAS spécifié dans l'instruction DATA */
2OUTPUT;
3 
4/* Écrit l'observation courante dans un ensemble de données SAS lorsqu'une condition spécifiée est vraie */
5IF deptcode gt 2000 THEN OUTPUT;
6 
7/* Écrit une observation dans l'ensemble de données MARKUP lorsque la valeur de PHONE est manquante */
8IF phone=. THEN OUTPUT markup;
2 Codeblock
DATA STEP Data
Erklärung :
Dieses Beispiel erstellt drei Beobachtungen im Datensatz 'response' für jede Beobachtung im Datensatz 'sulfa'. Der Datensatz 'sulfa' wird zuerst mit Inline-Daten (Datalines) erstellt. Anschließend liest der DATA-Schritt 'response' jede Beobachtung von 'sulfa' und verwendet die OUTPUT-Anweisung dreimal, um drei neue Beobachtungen zu erstellen, jede mit einem anderen 'time'-Wert, der von den Variablen 'time1', 'time2' und 'time3' stammt.
Kopiert!
1DATA sulfa;
2 INPUT patient $ time1 time2 time3;
3 DATALINES;
4pat1 10 20 30
5pat2 15 25 35
6;
7RUN;
8 
9DATA response(drop=time1-time3);
10 SET sulfa;
11 time=time1;
12 OUTPUT;
13 time=time2;
14 OUTPUT;
15 time=time3;
16 OUTPUT;
17RUN;
3 Codeblock
DATA STEP Data
Erklärung :
Dieses Beispiel zeigt, wie mehrere SAS-Datensätze ('ozone' und 'oxides') aus einer einzigen Eingabedatei erstellt werden. Eine temporäre Eingabedatei 'input_data.txt' wird zuerst erstellt. Der DATA-Schritt liest dann die Daten aus dieser Datei. Wenn die chemische Substanz 'O3' ist, wird die Beobachtung in den Datensatz 'ozone' geschrieben; andernfalls wird sie in den Datensatz 'oxides' geschrieben.
Kopiert!
1DATA _null_;
2 file 'input_data.txt';
3 put 'London 01JAN2025 O3 25';
4 put 'Paris 01JAN2025 NOx 15';
5 put 'Berlin 01JAN2025 O3 30';
6 put 'Rome 01JAN2025 SO2 10';
7RUN;
8 
9DATA ozone oxides;
10 INFILE 'input_data.txt';
11 INPUT city $ 1-15 date date9.
12 chemical $ 26-27 ppm 29-30;
13 IF chemical='O3' THEN OUTPUT ozone;
14 ELSE OUTPUT oxides;
15RUN;
4 Codeblock
DATA STEP Data
Erklärung :
Dieses Beispiel kombiniert mehrere Eingabebeobachtungen zu einer einzigen. Der Datensatz 'gadgets' wird mit Fehlerwerten erstellt. Der DATA-Schritt 'discards' liest diese Beobachtungen, summiert die Variable 'defects' in 'total' und schreibt eine einzige Beobachtung in 'discards', nachdem 10 Beobachtungen verarbeitet wurden, und stoppt dann die Verarbeitung.
Kopiert!
1DATA gadgets;
2 INPUT defects;
3 DATALINES;
41
52
63
74
85
96
107
118
129
1310
1411
1512
16;
17RUN;
18 
19DATA discards;
20 SET gadgets;
21 drop defects;
22 reps+1;
23 IF reps=1 THEN total=0;
24 total+defects;
25 IF reps=10 THEN DO;
26 OUTPUT;
27 stop;
28 END;
29RUN;
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.
Urheberrechtsinformationen : Copyright © SAS Institute Inc. All Rights Reserved


Banner
Expertenrat
Expert
Michael
Responsable de l'infrastructure Viya.
« Die OUTPUT-Anweisung ist einer der mächtigsten Befehle im SAS DATA-Schritt, da sie den standardmäßigen Schreibvorgang von SAS grundlegend verändert. Normalerweise schreibt SAS am Ende jeder Iteration automatisch eine Beobachtung (implizites Output). Sobald Sie jedoch eine explizite OUTPUT-Anweisung verwenden, übernehmen Sie die volle Kontrolle und die Automatik wird deaktiviert.

Um das Potenzial der OUTPUT-Anweisung voll auszuschöpfen, beachten Sie diese Best Practices:

Daten-Normalisierung: Nutzen Sie OUTPUT, um Breitformate in Langformate umzuwandeln. Indem Sie mehrere OUTPUT-Befehle innerhalb einer Iteration (z. B. nach der Zuweisung verschiedener Zeitpunkte) aufrufen, können Sie aus einer einzigen Eingabezeile mehrere Datensätze erzeugen.

Bedingtes Splitting: Kombinieren Sie OUTPUT mit IF-THEN-Logik, um Datenströme in verschiedene Ziel-Datensätze zu lenken (z. B. output ozone; vs. output oxides;). Dies ist performanter, als dieselbe Quelle mehrfach mit verschiedenen Filtern einzulesen.

Vorsicht bei der Platzierung: Denken Sie daran, dass Variablenwerte, die nach dem OUTPUT-Befehl im Code geändert werden, nicht mehr in die gerade geschriebene Beobachtung einfließen. Der Befehl fungiert wie ein "Schnappschuss" des aktuellen Program-Data-Vector (PDV).

Effiziente Berechnungen: In Verbindung mit RETAIN oder Akkumulatoren können Sie OUTPUT nutzen, um nur Endergebnisse (z. B. nach genau 10 Iterationen mittels STOP) zu schreiben, statt jede Zwischenberechnung zu speichern. »