SAS - Concaténer les ensembles de données

Plusieurs ensembles de données SAS peuvent être concaténés pour donner un seul ensemble de données à l'aide de SETdéclaration. Le nombre total d'observations dans l'ensemble de données concaténées est la somme du nombre d'observations dans les ensembles de données d'origine. L'ordre des observations est séquentiel. Toutes les observations du premier ensemble de données sont suivies de toutes les observations du second ensemble de données, et ainsi de suite.

Idéalement, tous les ensembles de données combinés ont les mêmes variables, mais dans le cas où ils ont un nombre différent de variables, alors dans le résultat toutes les variables apparaissent, avec des valeurs manquantes pour l'ensemble de données plus petit.

Syntaxe

La syntaxe de base de l'instruction SET dans SAS est -

SET data-set 1 data-set 2 data-set 3.....;

Voici la description des paramètres utilisés -

  • data-set1,data-set2 sont des noms de jeux de données écrits les uns après les autres.

Exemple

Considérez les données des employés d'une organisation qui sont disponibles dans deux ensembles de données différents, un pour le service informatique et un autre pour le service non-informatique. Pour obtenir les détails complets de tous les employés, nous concaténons les deux ensembles de données à l'aide de l'instruction SET illustrée ci-dessous.

DATA ITDEPT; 
   INPUT empid name $ salary  ; 
DATALINES; 
1 Rick 623.3 
3 Mike 611.5 
6 Tusar 578.6 
; 
RUN; 
DATA NON_ITDEPT; 
   INPUT empid name $ salary  ; 
DATALINES; 
2 Dan 515.2 
4 Ryan 729.1 
5 Gary 843.25 
7 Pranab 632.8 
8 Rasmi 722.5 
RUN; 
DATA All_Dept; 
   SET ITDEPT NON_ITDEPT; 
RUN; 
PROC PRINT DATA = All_Dept; 
RUN;

Lorsque le code ci-dessus est exécuté, nous obtenons la sortie suivante.

Scénarios

Lorsque nous avons de nombreuses variations dans les ensembles de données pour la concaténation, le résultat des variables peut différer, mais le nombre total d'observations dans l'ensemble de données concaténées est toujours la somme des observations dans chaque ensemble de données. Nous considérerons ci-dessous de nombreux scénarios sur cette variation.

Nombre différent de variables

Si l'un des ensembles de données d'origine contient plus de variables qu'un autre, les ensembles de données sont toujours combinés, mais dans l'ensemble de données plus petit, ces variables apparaissent comme manquantes.

Exemple

Dans l'exemple ci-dessous, le premier ensemble de données a une variable supplémentaire nommée DOJ. Dans le résultat, la valeur de DOJ pour le deuxième ensemble de données apparaîtra comme manquante.

DATA ITDEPT; 
   INPUT empid name $ salary DOJ date9.  ; 
DATALINES; 
1 Rick 623.3 02APR2001
3 Mike 611.5 21OCT2000
6 Tusar 578.6 01MAR2009  
; 
RUN; 
DATA NON_ITDEPT; 
   INPUT empid name $ salary  ; 
DATALINES; 
2 Dan 515.2 
4 Ryan 729.1 
5 Gary 843.25 
7 Pranab 632.8 
8 Rasmi 722.5 
RUN; 
DATA All_Dept; 
   SET ITDEPT NON_ITDEPT; 
RUN; 
PROC PRINT DATA = All_Dept; 
RUN;

Lorsque le code ci-dessus est exécuté, nous obtenons la sortie suivante.

Nom de variable différent

Dans ce scénario, les ensembles de données ont le même nombre de variables mais un nom de variable diffère entre eux. Dans ce cas, une concaténation normale produira toutes les variables de l'ensemble de résultats et donnera des résultats manquants pour les deux variables qui diffèrent. Bien que nous ne puissions pas modifier le nom de la variable dans les ensembles de données d'origine, nous pouvons appliquer la fonction RENAME dans l'ensemble de données concaténé que nous créons. Cela produira le même résultat qu'une concaténation normale, mais bien sûr avec un nouveau nom de variable à la place de deux noms de variables différents présents dans l'ensemble de données d'origine.

Exemple

Dans l'exemple de jeu de données ci-dessous, ITDEPT a le nom de variable ename alors que l'ensemble de données NON_ITDEPT a le nom de la variable empname.Mais ces deux variables représentent le même type (caractère). Nous appliquons leRENAME fonction dans l'instruction SET comme indiqué ci-dessous.

DATA ITDEPT; 
   INPUT empid ename $ salary  ; 
DATALINES; 
1 Rick 623.3 
3 Mike 611.5 
6 Tusar 578.6 
; 
RUN; 
DATA NON_ITDEPT; 
   INPUT empid empname $ salary  ; 
DATALINES; 
2 Dan 515.2 
4 Ryan 729.1 
5 Gary 843.25 
7 Pranab 632.8 
8 Rasmi 722.5 
RUN; 
DATA All_Dept; 
   SET ITDEPT(RENAME =(ename = Employee) ) NON_ITDEPT(RENAME =(empname = Employee) ); 
RUN; 
PROC PRINT DATA = All_Dept; 
RUN;

Lorsque le code ci-dessus est exécuté, nous obtenons la sortie suivante.

Différentes longueurs variables

Si les longueurs des variables dans les deux ensembles de données sont différentes de celles de l'ensemble de données concaténées, les valeurs dans lesquelles certaines données sont tronquées pour la variable de plus petite longueur. Cela se produit si le premier ensemble de données a une longueur plus petite. Pour résoudre ce problème, nous appliquons la longueur la plus élevée à l'ensemble de données comme indiqué ci-dessous.

Exemple

Dans l'exemple ci-dessous, la variable enameest de longueur 5 dans le premier ensemble de données et 7 dans le second. Lors de la concaténation, nous appliquons l'instruction LENGTH dans l'ensemble de données concaténé pour définir la longueur ename sur 7.

DATA ITDEPT; 
   INPUT  empid 1-2 ename $ 3-7 salary 8-14  ; 
DATALINES; 
1 Rick  623.3 
3 Mike  611.5 
6 Tusar 578.6 
; 
RUN;
DATA NON_ITDEPT; 
   INPUT  empid 1-2 ename $ 3-9  salary 10-16 ; 
DATALINES; 
2 Dan    515.2 
4 Ryan   729.1 
5 Gary   843.25
7 Pranab 632.8 
8 Rasmi  722.5 
RUN; 
DATA All_Dept; 
   LENGTH ename $ 7   ;
   SET ITDEPT  NON_ITDEPT ; 
RUN; 
PROC PRINT DATA = All_Dept; 
RUN;

Lorsque le code ci-dessus est exécuté, nous obtenons la sortie suivante.