Publié le :
ETL MIXTE

Concaténation de tables SAS

Ce code est également disponible en : Deutsch English Español
En attente de validation
Le script compare les comportements des différentes méthodes d'ajout de données. Il examine l'étape DATA avec l'instruction SET, les opérateurs ensemblistes de la PROC SQL (UNION, UNION ALL, UNION CORR, OUTER UNION) et la procédure PROC DATASETS avec l'instruction APPEND. Il met en évidence la gestion des doublons, l'alignement des colonnes (nommage différent) et l'utilisation de l'option FORCE lorsque les structures des tables diffèrent.
Analyse des données

Type : MIXTE


Les données sont dérivées de la table système 'sashelp.class' pour la table 'big', et créées manuellement via un DATA Step pour la table 'small'.

1 Bloc de code
DATA STEP Data
Explication :
Création de deux tables de travail : 'big' (extraite de sashelp.class avec duplication intentionnelle) et 'small' (une seule ligne avec des noms de colonnes/ordre différents pour simuler des incompatibilités structurelles).
Copié !
1title '2.8 Appending Data Sets';
2* Create a not so big data set;
3DATA big;
4 SET sashelp.class(keep=name sex age height weight);
5 where name > 'L';
6 OUTPUT big;
7 * create a duplicate for Mary;
8 IF name=:'M' THEN OUTPUT big;
9 RUN;
10DATA small;
11 * The variable WEIGHT has been misspelled as WT;
12 * The variables WT and HEIGHT are out of order;
13 name='fred'; sex='m'; age=5; wt=45; height=30;
14 RUN;
2 Bloc de code
DATA STEP Data
Explication :
Concaténation simple utilisant l'étape DATA et l'instruction SET. Cela empile les deux tables. Les colonnes présentes dans l'une mais pas l'autre (comme 'wt') auront des valeurs manquantes dans les lignes provenant de la table où elles sont absentes.
Copié !
1title2 'Using the SET Statement';
2* Append using the SET statement;
3DATA bigger;
4 SET big small;
5 RUN;
6PROC PRINT DATA=bigger;
7 RUN;
3 Bloc de code
PROC SQL Data
Explication :
Utilisation de l'opérateur SQL UNION. Cette méthode concatène les résultats mais supprime les lignes qui sont des doublons exacts (comportement par défaut de UNION).
Copié !
1title2 'Using SQL UNION';
2* Append using UNION;
3PROC SQL noprint;
4create TABLE bigger as
5 select *
6 from big
7 union
8 select *
9 from small;
10 QUIT;
11PROC PRINT DATA=bigger;
12RUN;
4 Bloc de code
PROC SQL Data
Explication :
Utilisation de SQL UNION ALL. Contrairement à UNION simple, UNION ALL conserve toutes les lignes, y compris les doublons.
Copié !
1title2 'Using SQL UNION ALL';
2* Append using UNION;
3PROC SQL noprint;
4create TABLE bigger as
5 select *
6 from big
7 union all
8 select *
9 from small;
10 QUIT;
11PROC PRINT DATA=bigger;
12RUN;
5 Bloc de code
PROC SQL Data
Explication :
Utilisation de UNION ALL avec renommage explicite de la colonne 'wt' en 'Weight' dans la deuxième requête pour aligner les structures de données.
Copié !
1title2 'Using SQL UNION ALL';
2title3 'Naming the Variables';
3* Append using UNION ALL;
4PROC SQL noprint;
5create TABLE bigger as
6 select *
7 from big
8 union all
9 select Name,Sex,Age,Height,wt as Weight
10 from small;
11 QUIT;
12PROC PRINT DATA=bigger;
13RUN;
6 Bloc de code
PROC SQL Data
Explication :
Utilisation de l'opérateur UNION CORR (CORResponding). SAS associe les colonnes par leur nom et non par leur position. Les colonnes qui n'existent pas dans les deux tables sont exclues du résultat.
Copié !
1title2 'Using SQL UNION CORR';
2* Append using UNION;
3PROC SQL noprint;
4create TABLE bigger as
5 select *
6 from big
7 union corr
8 select *
9 from small;
10 QUIT;
11PROC PRINT DATA=bigger;
12RUN;
7 Bloc de code
PROC SQL Data
Explication :
Utilisation de OUTER UNION. Cet opérateur effectue une union complète sans essayer d'overlay des colonnes si elles ne correspondent pas, bien que dans un contexte SAS SQL simple, cela ressemble souvent à un append permissif.
Copié !
1title2 'Using SQL OUTER UNION';
2* Append using UNION;
3PROC SQL noprint;
4create TABLE bigger as
5 select *
6 from big
7 outer union
8 select *
9 from small;
10 QUIT;
11PROC PRINT DATA=bigger;
12RUN;
8 Bloc de code
PROC DATASETS
Explication :
Utilisation de PROC DATASETS avec l'instruction APPEND pour ajouter des données directement à la table de base ('big') sans recréer toute la table. La première tentative échoue car les structures (noms/types de variables) diffèrent. La seconde réussit grâce à l'option FORCE, qui force l'ajout en tronquant les variables trop longues ou en ignorant celles qui ne sont pas dans la table de base.
Copié !
1title2 'Using the APPEND Statement';
2* Append using the APPEND Statement;
3* This step fails because of mismatched PDVs;
4PROC DATASETS library=work nolist;
5 append base=big DATA=small;
6 QUIT;
7 
8* Use the FORCE option;
9PROC DATASETS library=work nolist;
10 append base=big DATA=small force;
11 QUIT;
12PROC PRINT DATA=big;
13 RUN;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Banner
Le Conseil de l'Expert
Expert
Stéphanie
Spécialiste Machine Learning et IA.
« La concaténation de tables dans SAS semble triviale, mais le choix de la méthode impacte directement l'intégrité des données et les performances. L'instruction SET du DATA Step est la plus souple : elle aligne automatiquement les colonnes par nom et crée des valeurs manquantes pour les variables non communes. Cependant, si vous cherchez à optimiser les ressources système sur de gros volumes, la PROC DATASETS avec l'instruction APPEND est imbattable, car elle ajoute les données à la fin de la table de base sans la réécrire entièrement. Attention toutefois : elle nécessite l'option FORCE si les structures (PDV) ne sont pas strictement identiques, au risque de perdre les colonnes non présentes dans la table de destination. »