This should work:
data public.want;
set public.have;
length batch_id_dt1 batch_id1 varchar(*);
%varcharer(name=batch_id);
%varcharer(name=batch_id_dt);
run;
You could use proc sql to create a variable containing all the variables that need to be converted, assuming it is named "var_list":
%macro convert();
data public.want;
set public.have;
length batch_id_dt1 batch_id1 varchar(*);
%do i = 1 %to %sysfunc(countw(&var_list, %str( )));
%let var = %scan(&var_list, &i, %str( ));
%varcharer(name= &var);
%end;
run;
%mend convert;
%convert();
Code is untested.
... View more