Cannot do it that way. You will need to use a little code generation. You could query the SAS metadata to get a list of the variables and generate the new variable names. proc sql noprint ; select name, trim(name)||'mv' into :vlist separted by ' ' , :vlist2 separated by ' ' from dictionary.columns where libname='WORK' and memname='BASETABLENUM' and type='num' ; quit; data basetabel_imputed; set basetablenum; array wit &vlist; array new &vlist2; do i=1 to dim(wit); new(i) = (wit(i) = .); if new(i) then do; wit(i)= symget(vname(wit(i)); end; end; drop i; run; Now I am confused about why you are using macro variables to transfer the medians. It is much better use SAS datasets to do that. proc sql noprint ; select name , trim(name)||'mv' , trim(name)||'median' into :vlist separted by ' ' , :vlist2 separated by ' ' , :vlist3 separated by ' ' from dictionary.columns where libname='WORK' and memname='BASETABLENUM' and type='num' ; quit; proc summary data=basetablenum ; var &vlist ; output out=basetable_medians median=&vlist3; run; data basetabel_imputed; set basetablenum; if _N_=1 then set basetable_medians; array wit &vlist; array new &vlist2; array median &vlist3 ; do i=1 to dim(wit); new(i) = (wit(i) = .); if new(i) then do; wit(i)= median(i); end; end; drop i &vlist3; run;
... View more