Der Unterschied zwischen impliziter und expliziter Ausgabe (OUTPUT) ist oft eine Quelle der Verwirrung für Anfänger, aber genau das macht den Data Step so leistungsfähig.
In Foren taucht oft die Frage auf: "Ich verstehe die Theorie, aber wann soll ich das eine oder das andere verwenden?"
Standardmäßig verfügt jeder Data Step über eine implizite (automatische) Ausgabeanweisung am Ende des Codes, direkt vor dem RUN. Der Ablauf ist wie folgt:
Es schreibt die Zeile in die Ausgabetabelle (Implizite Ausgabe).
Es leert den PDV (Program Data Vector) und kehrt zum Anfang zurück, um die nächste Beobachtung zu lesen.
Deshalb müssen Sie bei einer einfachen Kopie kein OUTPUT schreiben:
data test;
set source;
/* L'output se fait tout seul ici ! */
run;
1
DATA test;
2
SETSOURCE;
3
/* L'output se fait tout seul ici ! */
4
RUN;
Note : Die Kontrolle übernehmen: Explizite Ausgabe
Sobald Sie das Schlüsselwort OUTPUT (oder OUTPUT tabellenname) irgendwo in Ihrem Data Step schreiben, deaktivieren Sie die automatische implizite Ausgabe.
Dies eröffnet zwei wichtige Anwendungsfälle, die in der Diskussion erläutert werden:
Fall A: Das Dispatching (Daten verteilen)
Wie Cathy erklärt, ist dies unerlässlich, um eine Tabelle in einem einzigen Durchlauf ("one pass") in mehrere Untertabellen aufzuteilen.
data hommes femmes;
set demog;
if sexe = 'M' then output hommes; /* Écrit seulement dans la table HOMMES */
else if sexe = 'F' then output femmes; /* Écrit seulement dans la table FEMMES */
run;
1
DATA hommes femmes;
2
SET demog;
3
IF sexe = 'M'THENOUTPUT hommes; /* Écrit seulement dans la table HOMMES */
4
ELSEIF sexe = 'F'THENOUTPUT femmes; /* Écrit seulement dans la table FEMMES */
5
RUN;
Note : Fall B: Aggregation und Filterung (Kontrolle der Schreibhäufigkeit)
Der zweite Experte zeigt, wie man die Anzahl der Zeilen (Aggregation) reduzieren kann, ohne ein statistisches Verfahren (PROC MEANS) zu verwenden.
Die Idee ist, Zeile für Zeile Berechnungen (Summen, Zähler) durchzuführen, das Ergebnis aber erst am Ende einer Gruppe zu schreiben (wenn last.variable wahr ist).
data synthese;
set ventes;
by produit; /* Nécessaire pour utiliser first. et last. */
/* Accumulation des sommes... */
if first.produit then total = 0;
total + montant;
/* On écrit SEULEMENT quand le groupe est fini */
if last.produit then output;
run;
1
DATA synthese;
2
SET ventes;
3
BY produit; /* Nécessaire pour utiliser first. et last. */
4
5
/* Accumulation des sommes... */
6
IF first.produit THEN total = 0;
7
total + montant;
8
9
/* On écrit SEULEMENT quand le groupe est fini */
10
IF last.produit THENOUTPUT;
11
RUN;
In diesem Beispiel:
Wenn Sie die implizite Ausgabe beibehalten hätten, hätten Sie für jede Eingabezeile eine Ausgabezeile (mit Teilergebnissen) erhalten.
Mit der expliziten bedingten Ausgabe (if ... then output) erhalten Sie nur eine Zeile pro Produkt.
Zusammenfassung: Die goldene Regel
Typ
Beschreibung
Wann verwenden?
Implizit
Automatisch am Ende des Schritts.
Für einfache Transformationen (1 Eingabezeile = 1 Ausgabezeile).
Explizit
Manuell über die OUTPUT-Anweisung. Deaktiviert die Automatik.
Zum Aufteilen von Daten (1 in N Tabellen), Multiplizieren von Zeilen (1 in N Zeilen) oder Aggregieren (N in 1 Zeile).
Technische Anmerkung: Eine weitere häufig erwähnte Anwendung ist das "Parsen" komplexer Dateien. Wenn eine Textdatei gemischte Header, Details und Fußzeilen enthält, ermöglicht die explizite Ausgabe, die Header in Tabelle A und die Details in Tabelle B zu senden, alles in einem einzigen Durchgang.
Wichtiger Haftungsausschluss
Die auf WeAreCAS.eu bereitgestellten Codes und Beispiele dienen Lehrzwecken. Es ist zwingend erforderlich, sie nicht blind in Ihre Produktionsumgebungen zu kopieren. Der beste Ansatz besteht darin, die Logik zu verstehen, bevor sie angewendet wird. Wir empfehlen dringend, diese Skripte in einer Testumgebung (Sandbox/Dev) zu testen. WeAreCAS übernimmt keine Verantwortung für mögliche Auswirkungen oder Datenverluste auf Ihren Systemen.
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.