SAS - Unisci set di dati

È possibile unire più set di dati SAS in base a una variabile comune specifica per fornire un unico set di dati. Questo viene fatto usando ilMERGE dichiarazione e BYdichiarazione. Il numero totale di osservazioni nel set di dati unito è spesso inferiore alla somma del numero di osservazioni nei set di dati originali. È perché le variabili di entrambi i set di dati vengono unite come un unico record in base a quando c'è una corrispondenza nel valore della variabile comune.

Esistono due prerequisiti per l'unione dei set di dati indicati di seguito:

  • i set di dati di input devono avere almeno una variabile comune su cui fondersi.
  • i set di dati di input devono essere ordinati in base alle variabili comuni che verranno utilizzate per l'unione.

Sintassi

La sintassi di base per l'istruzione MERGE e BY in SAS è:

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

Di seguito la descrizione dei parametri utilizzati:

  • Data-set1,Data-set2 sono nomi di set di dati scritti uno dopo l'altro.

  • Common Variable è la variabile in base ai cui valori corrispondenti verranno uniti i set di dati.

Unione dei dati

Cerchiamo di capire la fusione dei dati con l'aiuto di un esempio.

Esempio

Considera due set di dati SAS, uno contenente l'ID dipendente con nome e stipendio e un altro contenente ID dipendente con ID dipendente e reparto. In questo caso per ottenere le informazioni complete per ogni dipendente possiamo unire questi due set di dati. Il set di dati finale avrà ancora un'osservazione per dipendente, ma conterrà sia le variabili salariale che di reparto.

# 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

Il risultato precedente viene ottenuto utilizzando il codice seguente in cui viene utilizzata la variabile comune (ID) nell'istruzione BY. Si noti che le osservazioni in entrambi i set di dati sono già ordinate nella colonna 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;

Valori mancanti nella colonna corrispondente

Possono verificarsi casi in cui alcuni valori della variabile comune non corrisponderanno tra i set di dati. In questi casi, i set di dati vengono comunque uniti ma forniscono valori mancanti nel risultato.

Esempio

Si consideri il caso in cui l'ID dipendente 3 manca dallo stipendio del set di dati e l'ID dipendente 6 manca dal set di dati del modulo DEPT. Quando viene applicato il codice sopra, otteniamo il risultato seguente.

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

Unire solo le corrispondenze

Per evitare i valori mancanti nel risultato, possiamo considerare di mantenere solo le osservazioni con valori corrispondenti per la variabile comune. Ciò si ottiene utilizzando ilINdichiarazione. La dichiarazione di unione del programma SAS deve essere modificata.

Esempio

Nell'esempio seguente, il file IN= valore mantiene solo le osservazioni in cui i valori di entrambi i set di dati SALARY e DEPT incontro.

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;

All'esecuzione del programma SAS di cui sopra con la parte modificata sopra, otteniamo il seguente output.

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