In the recent issue of SAS TechReport, there was a tip for using %sysfunc to get all the variable names from a dataset and store them in a single macro variable. In the referenced sample code there is an alternate way using the dictionary tables:
%macro getvars(dsn);
%global vlist;
proc sql;
select name into :vlist separated by ' '
from dictionary.columns
where memname = upcase("&dsn");
quit;
%mend;
This creates a macro variable called &vlist that will contain the names of all the variables in your dataset, separated by a space. If you want commas between the variable names, all you have to do is change the 'separated by' value from ' ' to ', '. The use of the upcase function in the where statement avoids problems with someone passing the dataset name in the wrong case. The global statement is needed since the macro variable created will not necessarily be available outside the macro without defining it as global.
This tip was originally posted by Susan M on sasCommunity.org.