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.
Avertissement important
Les codes et exemples fournis sur WeAreCAS.eu sont à but pédagogique. Il est impératif de ne pas les copier-coller aveuglément sur vos environnements de production. La meilleure approche consiste à comprendre la logique avant de l'appliquer. Nous vous recommandons vivement de tester ces scripts dans un environnement de test (Sandbox/Dev). WeAreCAS décline toute responsabilité quant aux éventuels impacts ou pertes de données sur vos systèmes.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.