
Empiler des data sets
mai 22, 2008Ajouter des lignes à un data set en utilisant celles d’un autre data set, c’est possible avec SAS. Selon les particularités du data set, une ou plusieurs méthodes sont disponibles. Trois data sets en fin d’articles sont disponibles pour tester les différentes méthodes.
1. L’instruction SET dans un data step offre probablement le plus de flexibilité
Groupées les données : La souplesse de l’instruction SET vient notamment de l’instruction BY. Sans cette instruction, toutes les données du premier data set sont lues et ajoutée au data set final. Puis, seulement après les données du data set suivant sont ajoutées. Si on veut que les lignes apparaissent dans un ordre précis défini par une instruction BY, les données doivent être préalablement triées dans cet ordre.
Deux data sets et plus : en outre, plus de deux data sets peuvent êtes mis bout à bout. Les premières données qui s’afficheront seront celles du premier data set listé dans l’instruction SET.
Autorise un nombre de variables différent : A l’exception des variables listées dans une instruction BY, les data sets n’ont pas besoin d’avoir les même variables. La variable présente dans seulement certains data sets sera présente au final. Des valeurs manquantes seront ajoutées si besoin.
Même longueur et type pour les variables communes : Il est néanmoins important que certains attributs des variables présentes dans plusieurs data sets soient identiques.
- Longueur : SAS utilisera la longueur de la première variable lue. Si la longueur de la seconde variable est plus grande, les valeurs, textes notamment, seront tronquées.
- Type numérique ou caractère: L’attribut sur le type de la variable est aussi essentiel. SAS aura des problèmes en lisant à la fois des variables numériques et caractères du même nom.
- Nom de variable : Si les variables ont des noms différents. Il est possible de les renommer préalablement avec l’option RENAME.
Un nom de data set au choix : par ailleurs, on peut donner un nouveau nom au data set créé
La syntaxe du data set toujours disponible : enfin, les mêmes manipulations qu’avec une instruction SET avec un seul data set peuvent êtes effectuées. Les options (IN=) sont disponibles pour établir des conditions basées sur le data set source.
data seq_all;
set seq1 seq2 seq3;
run;
SAS Online Doc : The SET Statement
2. La procédure DATASETS (et PROC APPEND) peut s’avérer plus performante
La procédure DATASETS dispose de l’instruction APPEND. Cette procédure est plus récente que sa jumelle PROC APPEND. Elle propose d’autres instructions fortement utiles comme COPY et DELETE.
- Nombre de data sets d’entrée: Ici, il est impératif d’avoir deux et seulement deux data sets pour une jointure donnée.
- Structure des data sets d’entrée : Chaque data set doit avoir les mêmes variables.
- Nom du data set de sortie : Le data set final portera le nom du data set listé dans la base.
- Performances : APPEND pourra s’avérer plus performant si le data set défini dans la base est large. En effet, dans ce dernier cas, seul les observations du deuxième data set sont lues intégralement.
Priorité dans l’usage des bibliothèques : Dans l’exemple suivant, le data set SEQ1, SEQ2 et SEQ3 sont dans la bibliothèque WORK. Si aucune bibliothèque n’est donnée dans l’instruction APPEND, SAS utilise celle définie dans l’instruction PROC DATA SETS. Et comme aucune n’y est précisée, cela revient à utiliser la bibliothèque temporaire (WORK le plus souvent).
proc datasets;*lib=work;
append base=seq1 data=seq2;
*append base=work.seq1 data=work.seq2;
append base=seq1 data=seq3;
run;
Voici la même manipulation avec PROC APPEND.
proc append base=seq1 data=seq2;
*proc append base=work.seq1 data=work.seq2;
run;
proc append base=seq1 data=seq3;
run;
Vous pouvez vous reporter à la documentation SAS :The DATASETS Procedure et consulter l’instruction APPEND. On y rappelle notamment quand le data set de la base (BASE=), les options DROP, KEEP et RENAME ne sont pas exécutées.
3. Au final pas de doublons avec l’UNION d’une PROC SQL
Important : L’UNION de deux data sets avec une PROC SQL enlèvera les doublons. Il est donc important de savoir s’il y a des doublons qui sont à enlever ou non.
Ici, on peut faire l’union de plus de deux data sets. Ils devront néanmoins tous avoir les mêmes variables.
proc sql;
create table seq_all as
select * from seq1
union
select * from seq2
union
select * from seq3;
quit;
4. Insérer de nouvelles observations extraites d’un autre data set:
Il est possible aussi d’ajouter les observations avec l’instruction INSERT INTO. Le data set d’origine est alors actualisé. Dans l’exemple ci-dessous on ajoute seulement les observations des data sets SEQ2 et SEQ3 s’il si le test mesure la pression systolique (Systolic Blood Pressure, SBP).
NOTE : Il est important de sélectionner les observations à ajouter d’un data set différent de celui à mettre à jour. Sinon, SAS risque de rencontrer des problèmes. Voir la SAS Online Doc: INSERT Statement pour plus de précisions.
proc sql;
insert into seq1
select *
from seq2
where test_nom=‘SBP’;
insert into seq1
select *
from seq3
where test_nom=‘SBP’;
quit;
Annexe :
data seq1;
length test_nom $3 test_unit $4;
input test_nom $ test_seq test_val test_unit $;
datalines;
SBP 1 120 mmHg
DBP 1 80 mmHg
DBP 1 80 mmHg
;
run;
data seq2;
length test_nom $3 test_unit $4;
input test_nom $ test_seq test_val test_unit $;
datalines;
SBP 2 115 mmHg
DBP 2 85 mmHg
;
run;
data seq3;
length test_nom $3 test_unit $4;
input test_nom $ test_seq test_val test_unit $;
datalines;
SBP 3 117 mmHg
DBP 3 81 mmHg
;
run;
Votre commentaire