sample code: data time0; input id $ var1-var5; cards; aa 5 4 3 2 1 bb 6 7 8 9 10 ; data time1; input id $ var1-var5; cards; aa 5 9 3 2 1 bb 8 7 8 9 11 ; proc sort data=time0;by id;run; proc sort data=time1;by id;run; %let lib=work; %let dsn=time0; /* put your variables in a macro variable */ proc sql noprint; select catx('=',name,cats(name,'_t1')) into : renames separated by ' ' from dictionary.columns where libname="%upcase(&lib)" and memname="%upcase(&dsn)" and type='num' and lowcase(name) not in ('id')/* put the variables you don't want to be calculated here */; select cats('diff_',name,'=',name,cats('-',name,'_t1')) into : diff separated by '; ' from dictionary.columns where libname="%upcase(&lib)" and memname="%upcase(&dsn)" and type='num' and lowcase(name) not in ('id'); quit; /* rename your vareiables in dataset time1 */ proc datasets lib=work nolist; modify time1; rename &renames; quit; data want; merge time0(in=a) time1(in=b); by id; if a and b; &diff; run; proc print;run; d d d d d i i i i i v v v v v f f f f f a a a a a f f f f f r r r r r _ _ _ _ _ v v v v v 1 2 3 4 5 v v v v v O a a a a a _ _ _ _ _ a a a a a b i r r r r r t t t t t r r r r r s d 1 2 3 4 5 1 1 1 1 1 1 2 3 4 5 1 aa 5 4 3 2 1 5 9 3 2 1 0 -5 0 0 0 2 bb 6 7 8 9 10 8 7 8 9 11 -2 0 0 0 -1
... View more