Apologies for reviving this thread, but this is a recurring question, and I just posted this on linkedin and thought it belongs here too. A quick and dirty macro does the work without extra SAS code, and does more. Unsure why I need the quotes, there. Probably obvious, but no time to think about it. If someone knows... %macro var_filter(table, string, filter); %* filter can be: end, anywhere; %let string=%upcase(&string); %local dsid varnum varname diff; %let dsid=%sysfunc(open(&table)); %if &dsid=0 %then %return; %do varnum=1 %to %sysfunc(attrn(&dsid,nvars)); %let varname=%upcase(%sysfunc(varname(&dsid,&varnum))); %let diff=%eval(%length(&varname) - %length(&string)); %if &diff >= 0 %then %do; %if %upcase(&filter)=END %then %if "%substr(&varname,&diff+1)" = "&string" %then &varname; %if %upcase(&filter)=ANYWHERE %then %if %index(&varname,&string) %then &varname; %end; %end; %let dsid=%sysfunc(close(&dsid)); %mend; data T; set SASHELP.CLASS; drop %var_filter(SASHELP.CLASS, GE, END); run;
... View more