When converting a single variable I typically do it like so: num_var=input(char_var,8.);
drop char_var;
rename num_var; This is the current code a friend offered (and honestly is a bit over my head) that I am attempting to use but am getting some errors: %Macro Numb;
%let excludevars=id;
proc sql noprint;
select name into :charvars separated by ' '
from dictionary.columns
where libname="WORK" and memname="Endorse_OTP_V1" and type="char" and name like "t_%"
and not indexw(upcase("&excludevars"),upcase(name));
quit;
%let ncharvars=%sysfunc(countw(&charvars));
%put charvars=&charvars;
%put ncharvars=&ncharvars;
data _null_;
set endorse_otp_v1 end=lastobs;
array charvars{*} &charvars;
array charvals{&ncharvars};
do i=1 to &ncharvars;
if input(charvars{i},?? best12.)=. and charvars{i} ne ' ' then charvals{i}+1;
end;
if lastobs then do;
length varlist $ 32767;
do j=1 to &ncharvars;
if charvals{j}=. then varlist=catx(' ',varlist,vname(charvars{j}));
end;
call symputx('varlist',varlist);
end;
run;
%put varlist=&varlist;
%let nvars=%sysfunc(countw(&varlist));
%macro renamer;
%do i=1 %to &nvars;
rename x&i = %scan(&varlist,&i) ;
%end;
%mend renamer;
data endorse_otp_v1;
set endorse_otp_v1;
array charx{&nvars} &varlist;
array x{&nvars} ;
do i=1 to &nvars;
x{i}=input(charx{i},best12.);
end;
drop &varlist i;
%renamer
run;
%end;
%mend;
%numb; : Thanks!
... View more