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.
Aviso importante
Los códigos y ejemplos proporcionados en WeAreCAS.eu son con fines educativos. Es imperativo no copiarlos y pegarlos ciegamente en sus entornos de producción. El mejor enfoque es comprender la lógica antes de aplicarla. Recomendamos encarecidamente probar estos scripts en un entorno de prueba (Sandbox/Dev). WeAreCAS no acepta ninguna responsabilidad por cualquier impacto o pérdida de datos en sus sistemas.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.