data a;
input id x1 x2 @@;
cards;
1 11 12
2 21 22
4 41 42
4 411 422
5 51 52
;
data b; input id x3 @@;
cards;
1 13 3 33 4 43 5 53 5 533 5 5333
;
run;
data c;
merge a b;
by id;
run;
proc sort data=c;
by id;
run;
data d;
set c;
by id;
if first.id and last.id then delete;
run;
proc transpose data=d out=e(rename=(_name_=var));
by id;
run;
data d1;
set d;
by id;
if first.id then n=1;
else n+1;
if last.id;
keep id n;
run;
data temp;
merge e d1;
by id;
run;
options mprint symbolgen mlogic;
%macro compare;
data f;
merge e d1;
by id;
run;
data g;
set f end=last;
call symput('num'||left(_n_),trim(left(n)));
if last then call symput("tot",left(_n_));
run;
data h;
set g;
%do t=1 %to &tot;
if _n_=&t then do;
%do i=1 %to &&num&t;
%do j=%eval(&i+1) %to &&num&t;
if col&i ne col&j then output;
%end;
%end;
end;
%end;
run;
proc sort data=h nodupkey;
by id var;
run;
%mend;
%compare