I modified to rename multiple variables. Check below: %Macro Mrename(ds,prefix);
data _null_;
call symputx('vcnt',count("&prefix",' ')+1);
run;
%do i=1 %to &vcnt;
%let prefix&i=%scan(&prefix,&i,' ');
%end;
data _null_;
dsid=open("&ds.",'I');
array varcnt{&vcnt};
if dsid>0 then do;
vars=attrn(dsid,'nvars');
do i=1 to vars;
%do k=1 %to &vcnt;
if find(upcase(varname(dsid,i)),upcase("&&prefix&k"))=1 then do;
j+1;
varcnt{&k}+1;
call symputx(cats('vnm_old',j),varname(dsid,i));
call symputx(cats('vnm_new',j),cats("&&prefix&k",varcnt{&k}));
end;
%end;
end;
call symputx('renamevars',j);
rc=close(dsid);
end;
run;
data &ds._renamed;
set &ds.;
%do i=1 %to &renamevars.;
rename &&vnm_old&i. = &&vnm_new&i.;
%end;
run;
%Mend Mrename;
/* Specify words to rename separated by spaces. */
%Mrename(work.have,ID YEAR);
/* You can control prefix to uppercase or lowercase. */
/* Both are the same... =) */
/*%Mrename(work.have,id year);*/
... View more