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.
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.