%macro keepCharcter(libname,dataname,newdata);
proc sql;
select count(*) into :cnt from sashelp.vcolumn where upper(libname)=upper("&libname") and upper(memname)=upper("&dataname") and type="char";
quit;
%let cnt=&cnt;
proc sql;
select name into :name1-:name&cnt from sashelp.vcolumn where upper(libname)=upper("&libname") and upper(memname)=upper("&dataname") and type="char";
quit;
data &newdata;
set &libname..&dataname;
keep %do i=1 %to &cnt; &&name&i %end;;
run;
%mend;
%keepCharcter(sashelp,class,new1);
%keepCharcter(sashelp,iris,new2);