Compare to Tom's suggestion. This code is lifted from Macro CallText http://www.sascommunity.org/wiki/Macro_CallText /* name: ...\SAS-site\macros\listvars.sas description: macro function: return list of vars in data set purpose : demo SCL open, varname, and close functions ******/ %MACRO listvars (Data = sashelp.class ,Testing = 0 )/ des = 'site: macro function: return list of vars in data set' /**** ** store source /* */ ;/* RJF2 2/27/2013 2:05:28 PM ****** NOTE: _C_*: avoid name collisions w/data set vars ***/ %local _C_Col _C_Dsid _C_Hex16 _C_Nobs _C_Nvars _C_Rc _C_Row _C_Type _C_Name _C_Num _C_Testing _C_Text _C_Testing _C_TimeStart _C_TimeEnd; %let _C_Testing= %eval( &Testing or( %sysfunc(getoption(MPRINT)) eq MPRINT and %sysfunc(getoption(SOURCE2)) eq SOURCE2)); %let _C_TimeStart = %sysfunc(datetime(),hex16.); %** description: assertions; %** purpose : if fail then exit; %if not(%sysfunc(exist(&Data.))) %then %do; %put Err%str()or: &SysMacroname. exiting: not exist(&Data.); %return; %end; %let _C_Dsid = %sysfunc(open (&Data. )); %let _C_Nobs = %sysfunc(attrn(&_C_Dsid.,Nobs )); %let _C_Nvars = %sysfunc(attrn(&_C_Dsid.,Nvars)); %if not &_C_Nobs. or not &_C_Nvars. %then %do; %put Err%str()or: &SysMacroName. &Data. obs=&_C_Nobs. vars=&_C_Nvars.; %goto CloseExit; %end; %else %put note: &SysMacroname. reading &Data. obs=&_C_Nobs. vars=&_C_Nvars.; %do _C_Col = 1 %to &_C_Nvars.; %sysfunc(varname (&_C_Dsid.,&_C_Col. )) %end; %CloseExit: %let _C_Rc = %sysfunc(close(&_C_Dsid.)); %mend listvars; compare with Tom's original solution for each variable. Ron Fehd SCL maven %Let ListVars =%listvars(Data = sashelp.class); %put ListVars:&ListVars.; %Let ListVars =%listvars(Data = sashelp.heart); %put ListVars:&ListVars.; *error: not exits data; %Let ListVars =%listvars(Data = sashelp.classX); %put ListVars:&ListVars.;
... View more