SAS - Fusionner les ensembles de données

Plusieurs ensembles de données SAS peuvent être fusionnés en fonction d'une variable commune spécifique pour donner un seul ensemble de données. Ceci est fait en utilisant leMERGE déclaration et BYdéclaration. Le nombre total d'observations dans l'ensemble de données fusionné est souvent inférieur à la somme du nombre d'observations dans les ensembles de données d'origine. C'est parce que les variables des deux ensembles de données sont fusionnées en un seul enregistrement en cas de correspondance dans la valeur de la variable commune.

Il existe deux conditions préalables à la fusion des ensembles de données ci-dessous:

  • Les ensembles de données d'entrée doivent avoir au moins une variable commune sur laquelle fusionner.
  • les ensembles de données d'entrée doivent être triés par la ou les variables communes qui seront utilisées pour fusionner.

Syntaxe

La syntaxe de base pour l'instruction MERGE et BY dans SAS est -

MERGE Data-Set 1 Data-Set 2
BY Common Variable

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.

  • Common Variable est la variable basée sur les valeurs correspondantes dont les ensembles de données seront fusionnés.

Fusion de données

Comprenons la fusion des données à l'aide d'un exemple.

Exemple

Considérez deux ensembles de données SAS, l'un contenant l'ID d'employé avec le nom et le salaire et l'autre contenant l'ID d'employé avec l'ID d'employé et le service. Dans ce cas, pour obtenir les informations complètes sur chaque employé, nous pouvons fusionner ces deux ensembles de données. L'ensemble de données final contiendra toujours une observation par employé, mais il contiendra à la fois les variables de salaire et de service.

# Data set 1	
ID NAME SALARY	
1 Rick 623.3		 
2 Dan 515.2 		
3 Mike 611.5 		
4 Ryan 729.1 
5 Gary 843.25 
6 Tusar 578.6 
7 Pranab 632.8 
8 Rasmi 722.5 

# Data set 2
ID DEPT
1 IT 
2 OPS
3 IT 
4 HR 
5 FIN 
6 IT 
7 OPS
8 FIN 

# Merged data set
ID NAME SALARY DEPT	
1 Rick 623.3	IT 		 
2 Dan 515.2 	OPS	
3 Mike 611.5 	IT 	
4 Ryan 729.1    HR 
5 Gary 843.25   FIN 
6 Tusar 578.6   IT 
7 Pranab 632.8  OPS
8 Rasmi 722.5   FIN

Le résultat ci-dessus est obtenu en utilisant le code suivant dans lequel la variable commune (ID) est utilisée dans l'instruction BY. Veuillez noter que les observations des deux ensembles de données sont déjà triées dans la colonne ID.

DATA SALARY; 
   INPUT empid name $ salary  ; 
DATALINES; 
1 Rick 623.3		 
2 Dan 515.2 		
3 Mike 611.5 		
4 Ryan 729.1 
5 Gary 843.25 
6 Tusar 578.6 
7 Pranab 632.8 
8 Rasmi 722.5 
;
RUN; 
DATA DEPT; 
   INPUT empid dEPT $ ; 
DATALINES; 
1 IT 
2 OPS
3 IT 
4 HR 
5 FIN 
6 IT 
7 OPS
8 FIN 
;
RUN; 
DATA All_details;
MERGE SALARY DEPT;
BY (empid);
RUN;
PROC PRINT DATA = All_details; 
RUN;

Valeurs manquantes dans la colonne correspondante

Il peut y avoir des cas où certaines valeurs de la variable commune ne correspondent pas entre les ensembles de données. Dans de tels cas, les ensembles de données sont toujours fusionnés mais donnent des valeurs manquantes dans le résultat.

Exemple

Prenons le cas de l'ID d'employé 3 manquant dans le salaire de l'ensemble de données et de l'ID d'employé 6 manquant dans l'ensemble de données DEPT. Lorsque le code ci-dessus est appliqué, nous obtenons le résultat ci-dessous.

ID NAME SALARY DEPT	
1 Rick 623.3	IT 		 
2 Dan 515.2 	OPS	
3 .		.		IT
4 Ryan 729.1    HR 
5 Gary 843.25   FIN 
6 Tusar 578.6   .
7 Pranab 632.8  OPS
8 Rasmi 722.5   FIN

Fusionner uniquement les correspondances

Pour éviter les valeurs manquantes dans le résultat, nous pouvons envisager de ne conserver que les observations avec des valeurs correspondantes pour la variable commune. Ceci est réalisé en utilisant leINdéclaration. L'instruction de fusion du programme SAS doit être modifiée.

Exemple

Dans l'exemple ci-dessous, le IN= valeur ne conserve que les observations où les valeurs des deux ensembles de données SALARY et DEPT rencontre.

DATA All_details;
MERGE SALARY(IN = a) DEPT(IN = b);
BY (empid);
IF a = 1 and b = 1;
RUN;
PROC PRINT DATA = All_details; 
RUN;

Lors de l'exécution du programme SAS ci-dessus avec la partie modifiée ci-dessus, nous obtenons la sortie suivante.

1 Rick 623.3	IT 		 
2 Dan 515.2 	OPS	
4 Ryan 729.1    HR 
5 Gary 843.25   FIN 
7 Pranab 632.8  OPS
8 Rasmi 722.5   FIN