SAS - Concatenate Data Set

È possibile concatenare più set di dati SAS per fornire un singolo set di dati utilizzando l'estensione SETdichiarazione. Il numero totale di osservazioni nel set di dati concatenato è la somma del numero di osservazioni nei set di dati originali. L'ordine delle osservazioni è sequenziale. Tutte le osservazioni della prima serie di dati sono seguite da tutte le osservazioni della seconda serie di dati e così via.

Idealmente tutti i set di dati combinati hanno le stesse variabili, ma nel caso in cui abbiano un numero diverso di variabili, nel risultato vengono visualizzate tutte le variabili, con valori mancanti per il set di dati più piccolo.

Sintassi

La sintassi di base per l'istruzione SET in SAS è:

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

Di seguito la descrizione dei parametri utilizzati:

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

Esempio

Considera i dati dei dipendenti di un'organizzazione che sono disponibili in due diversi set di dati, uno per il reparto IT e un altro per il reparto non IT. Per ottenere i dettagli completi di tutti i dipendenti, concateniamo entrambi i set di dati utilizzando l'istruzione SET mostrata di seguito.

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;

Quando il codice precedente viene eseguito, otteniamo il seguente output.

Scenari

Quando abbiamo molte variazioni nei set di dati per la concatenazione, il risultato delle variabili può differire ma il numero totale di osservazioni nel set di dati concatenato è sempre la somma delle osservazioni in ciascun set di dati. Considereremo di seguito molti scenari su questa variazione.

Diverso numero di variabili

Se uno dei set di dati originali ha un numero di variabili maggiore di un altro, i set di dati vengono comunque combinati ma nel set di dati più piccolo tali variabili appaiono come mancanti.

Esempio

Nell'esempio seguente il primo set di dati ha una variabile aggiuntiva denominata DOJ. Nel risultato apparirà come mancante il valore di DOJ per il secondo set di dati.

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;

Quando il codice precedente viene eseguito, otteniamo il seguente output.

Nome variabile diverso

In questo scenario i set di dati hanno lo stesso numero di variabili ma il nome di una variabile è diverso tra di loro. In tal caso una normale concatenazione produrrà tutte le variabili nel set di risultati e darà risultati mancanti per le due variabili che differiscono. Sebbene non possiamo modificare il nome della variabile nei set di dati originali, possiamo applicare la funzione RENAME nel set di dati concatenato che creiamo. Ciò produrrà lo stesso risultato di una normale concatenazione, ma ovviamente con un nuovo nome di variabile al posto di due diversi nomi di variabile presenti nel set di dati originale.

Esempio

Nell'esempio seguente il set di dati ITDEPT ha il nome della variabile ename considerando che il set di dati NON_ITDEPT ha il nome della variabile empname.Ma entrambe queste variabili rappresentano lo stesso tipo (carattere). Applichiamo ilRENAME funzione nell'istruzione SET come mostrato di seguito.

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;

Quando il codice precedente viene eseguito, otteniamo il seguente output.

Diverse lunghezze variabili

Se le lunghezze delle variabili nei due set di dati sono diverse dal set di dati concatenato avranno valori in cui alcuni dati vengono troncati per la variabile di lunghezza inferiore. Succede se il primo set di dati ha una lunghezza inferiore. Per risolvere questo problema, applichiamo la lunghezza maggiore a entrambi i set di dati come mostrato di seguito.

Esempio

Nell'esempio seguente la variabile enameè di lunghezza 5 nel primo set di dati e 7 nel secondo. Durante la concatenazione, applichiamo l'istruzione LENGTH nel set di dati concatenato per impostare la lunghezza di ename su 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;

Quando il codice precedente viene eseguito, otteniamo il seguente output.