2012-08-27 10 views
11

Sto tentando di concatenare più set di dati in SAS e sto cercando un modo per archiviare informazioni sui singoli nomi di dataset nel set di dati finale impilato.SAS: concatenare set di dati diversi mantenendo i nomi delle singole tabelle dati

Ad es. i set di dati iniziali sono "my_data_1", "abc" e "xyz", ciascuno con le colonne "var_1" e "var_2".

Voglio finire con un set di dati "finale" con colonne "var_1", "var_2" e "var_3". dove 'var_3' contiene valori "my_data_1", "abc" o "xyz" a seconda di quale set di dati è stata generata da una particolare riga.

(Ho una soluzione cludgy per fare questo, ad esempio aggiungendo il nome della tabella come variabile extra in tutti i singoli set di dati, ma ho circa 100 tabelle da impilare e sto cercando un modo efficace per farlo.)

risposta

8

Utilizzare l'istruzione in quando si imposta ogni set di dati:

data final; 
set my_data_1(in=a) abc(in=b) xyc(in=c); 
if a then var_3='my_data_1'; 
if b then var_3='abc'; 
if c then var_3='xyz'; 
run; 
30

Se si dispone di SAS 9.2 o più recente si ha la possibilità INDSNAME http://support.sas.com/kb/34/513.html

Quindi:

data final; 
format dsname datasetname $20.; *something equal to or longer than the longest dataset name including the library and dot; 
set my_data_1 abc xyc indsname=dsname; 
datasetname=dsname; 
run; 
+0

Wow - questo è fantastico, non sapevo che avessero aggiunto questa opzione! Lo userò sempre ... –

+0

Cool, ottima opzione +1 – mAndroid

Problemi correlati