I wouldn't do this in a loop - you can create a macro variable holding the rename string and then execute this with Proc Datasets as in the code below NB correct capitalisation is vital in Proc SQL
data inputset;
length dataperiod $5 food 8 house 8 material 8;
infile datalines dlm=",";
input dataperiod $ food house material $;
datalines;
Year1,1,5,8
Year2,8,3,2
Year3,3,2,7
;
run;
DATA outputset;
set inputset;
Food = dif(Food);
House = dif(House);
Material=dif(Material);
run;
proc sql noprint;
select cats(name,'=','dif',name)
into :varlist
separated by ' '
from dictionary.columns
where libname= 'WORK' and memname= 'INPUTSET' and name ne 'dataperiod';
quit;
%put &varlist;
proc datasets lib=work;
modify outputset;
rename &varlist;
quit;
... View more