steadyfish
steadyfish

Reputation: 877

SAS: concatenate different datasets while keeping the individual data table names

I'm trying to concatenate multiple datasets in SAS, and I'm looking for a way to store information about individual dataset names in the final stacked dataset.

For eg. initial data sets are "my_data_1", "abc" and "xyz", each with columns 'var_1' and 'var_2'.

I want to end up with "final" dataset with columns 'var_1', 'var_2' and 'var_3'. where 'var_3' contains values "my_data_1", "abc" or "xyz" depending on from which dataset a particular row came.

(I have a cludgy solution for doing this i.e. adding table name as an extra variable in all individual datasets. But I have around 100 tables to be stacked and I'm looking for an efficient way to do this.)

Upvotes: 13

Views: 2532

Answers (2)

Joe
Joe

Reputation: 63434

If you have SAS 9.2 or newer you have the INDSNAME option http://support.sas.com/kb/34/513.html

So:

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;

Upvotes: 34

itzy
itzy

Reputation: 11765

Use the in statement when you set each data set:

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;

Upvotes: 10

Related Questions