data a;
input id name $ drgif dn msd $;
cards;
1 zhang 1 1 white
2 li 2 1 red
3 chen 2 2 one
;
run;
proc contents data=a out=varname noprint varnum; run;
proc sql noprint;
select name into : varlist separated by ',' from varname;
quit;
%macro split/parmbuff;
%do i=1 %to 5;
%let var&i=%scan(%bquote(&syspbuff),&i);
%global var&i;
%end;
%mend;
%split(&varlist)
%macro check;
data b;
set a;
%do i=1 %to 5;
if anyalpha(&&var&i)=0 then &&var&i.._n=input(&&var&i,best.);
%end;
run;
%mend;
%check
proc print data=b;run;