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é !
title '2.8 Appending Data Sets';
* Create a not so big data set;
data big;
set sashelp.class(keep=name sex age height weight);
where name > 'L';
output big;
* create a duplicate for Mary;
if name=:'M' then output big;
run;
data small;
* The variable WEIGHT has been misspelled as WT;
* The variables WT and HEIGHT are out of order;
name='fred'; sex='m'; age=5; wt=45; height=30;
run;
1
title '2.8 Appending Data Sets';
2
* Create a not so big data set;
3
DATA 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'THENOUTPUT big;
9
RUN;
10
DATA 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é !
title2 'Using the SET Statement';
* Append using the SET statement;
data bigger;
set big small;
run;
proc print data=bigger;
run;
1
title2 'Using the SET Statement';
2
* Append using the SET statement;
3
DATA bigger;
4
SET big small;
5
RUN;
6
PROC PRINTDATA=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é !
title2 'Using SQL UNION';
* Append using UNION;
proc sql noprint;
create table bigger as
select *
from big
union
select *
from small;
quit;
proc print data=bigger;
run;
1
title2 'Using SQL UNION';
2
* Append using UNION;
3
PROC SQL noprint;
4
create TABLE bigger as
5
select *
6
from big
7
union
8
select *
9
from small;
10
QUIT;
11
PROC PRINTDATA=bigger;
12
RUN;
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é !
title2 'Using SQL UNION ALL';
* Append using UNION;
proc sql noprint;
create table bigger as
select *
from big
union all
select *
from small;
quit;
proc print data=bigger;
run;
1
title2 'Using SQL UNION ALL';
2
* Append using UNION;
3
PROC SQL noprint;
4
create TABLE bigger as
5
select *
6
from big
7
union all
8
select *
9
from small;
10
QUIT;
11
PROC PRINTDATA=bigger;
12
RUN;
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é !
title2 'Using SQL UNION ALL';
title3 'Naming the Variables';
* Append using UNION ALL;
proc sql noprint;
create table bigger as
select *
from big
union all
select Name,Sex,Age,Height,wt as Weight
from small;
quit;
proc print data=bigger;
run;
1
title2 'Using SQL UNION ALL';
2
title3 'Naming the Variables';
3
* Append using UNION ALL;
4
PROC SQL noprint;
5
create 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;
12
PROC PRINTDATA=bigger;
13
RUN;
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é !
title2 'Using SQL UNION CORR';
* Append using UNION;
proc sql noprint;
create table bigger as
select *
from big
union corr
select *
from small;
quit;
proc print data=bigger;
run;
1
title2 'Using SQL UNION CORR';
2
* Append using UNION;
3
PROC SQL noprint;
4
create TABLE bigger as
5
select *
6
from big
7
union corr
8
select *
9
from small;
10
QUIT;
11
PROC PRINTDATA=bigger;
12
RUN;
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é !
title2 'Using SQL OUTER UNION';
* Append using UNION;
proc sql noprint;
create table bigger as
select *
from big
outer union
select *
from small;
quit;
proc print data=bigger;
run;
1
title2 'Using SQL OUTER UNION';
2
* Append using UNION;
3
PROC SQL noprint;
4
create TABLE bigger as
5
select *
6
from big
7
outer union
8
select *
9
from small;
10
QUIT;
11
PROC PRINTDATA=bigger;
12
RUN;
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é !
title2 'Using the APPEND Statement';
* Append using the APPEND Statement;
* This step fails because of mismatched PDVs;
proc datasets library=work nolist;
append base=big data=small;
quit;
* Use the FORCE option;
proc datasets library=work nolist;
append base=big data=small force;
quit;
proc print data=big;
run;
1
title2 'Using the APPEND Statement';
2
* Append using the APPEND Statement;
3
* This step fails because of mismatched PDVs;
4
PROC DATASETS library=work nolist;
5
append base=big DATA=small;
6
QUIT;
7
8
* Use the FORCE option;
9
PROC DATASETS library=work nolist;
10
append base=big DATA=small force;
11
QUIT;
12
PROC PRINTDATA=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.
« 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. »
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.