La différence entre l'écriture implicite et explicite (OUTPUT) est souvent source de confusion pour les débutants, pourtant c'est ce qui donne au Data Step toute sa puissance.
Sur les forums, la question revient souvent : "Je comprends la théorie, mais quand dois-je utiliser l'un ou l'autre ?"
Par défaut, chaque étape Data possède une instruction de sortie implicite (automatique) à la toute fin du code, juste avant le RUN. Le cycle se déroule ainsi :
Il écrit la ligne dans la table de sortie (Output Implicite).
Il vide le PDV (Program Data Vector) et remonte au début pour lire l'observation suivante.
C'est pour cela que vous n'avez pas besoin d'écrire OUTPUT pour une copie simple :
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 : Prendre le Contrôle : L'Output Explicite
Dès que vous écrivez le mot-clé OUTPUT (ou OUTPUT nom_table) quelque part dans votre étape Data, vous désactivez l'output implicite automatique.
Cela ouvre la porte à deux cas d'usage majeurs expliqués dans la discussion :
Cas A : La Dispatching (Répartir les données)
Comme l'explique Cathy, c'est indispensable pour diviser une table en plusieurs sous-tables en une seule lecture ("one pass").
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 : Cas B : L'Agrégation et le Filtrage (Contrôler la fréquence d'écriture)
Le second expert montre comment réduire le nombre de lignes (aggrégation) sans utiliser de procédure statistique (PROC MEANS).
L'idée est de faire des calculs ligne par ligne (sommes, compteurs), mais de n'écrire le résultat qu'à la fin d'un groupe (quand last.variable est vrai).
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;
Dans cet exemple :
Si vous aviez laissé l'output implicite, vous auriez eu une ligne de sortie pour chaque ligne d'entrée (avec des totaux partiels).
Avec l'output explicite conditionnel (if ... then output), vous n'obtenez qu'une ligne par produit.
Résumé : La règle d'or
Type
Description
Quand l'utiliser ?
Implicite
Automatique à la fin du step.
Pour des transformations simples (1 ligne entrée = 1 ligne sortie).
Explicite
Manuel via l'instruction OUTPUT. Désactive l'automatisme.
Pour éclater des données (1 vers N tables), multiplier des lignes (1 vers N lignes) ou agréger (N vers 1 ligne).
Note technique : Un autre usage fréquent mentionné est le "parsing" de fichiers complexes. Si un fichier texte contient des entêtes, des détails et des pieds de page mélangés, l'output explicite permet d'envoyer les entêtes dans une table A et les détails dans une table B, le tout en une seule lecture.
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.