|
options mprint mlogic symbolgen source;
data work.a;
input id1 $ id2 $ id3 $ id4 $;
datalines;
1 2 3 4
2 3 7 9
5 9 7 6
2 0 3 1
4 8 5 6
1 2 3 4
5 9 7 6
;
run;
data work.a;
set work.a;
i+1;
run;
proc sql noprint;
create table work.result(
id1 varchar(4),
id2 varchar(4),
id3 varchar(4),
id4 varchar(4),
count numeric
);
select count(*) into :cnt
from work.a;
quit;
%macro a;
%let cnt = &cnt;
%do j = 1 %to &cnt;
proc sql noprint;
select id1,id2,id3,id4 into :id1,:id2,:id3,:id4
from work.a
where i = &j;
quit;
data work.c;
set work.a;
if id1 = &id1 or id1 = &id2 or id1 = &id3 or id1 = &id4 then do;
count+1;
end;else if id2 = &id1 or id2 = &id2 or id2 = &id3 or id2 = &id4 then do;
count+1;
end;else if id3 = &id1 or id3 = &id2 or id3 = &id3 or id3 = &id4 then do;
count+1;
end;else if id4 = &id1 or id4 = &id2 or id4 = &id3 or id4 = &id4 then do;
count+1;
end;
run;
proc sql noprint;
select max(count) as count into :count
from work.c;
%let count = &count;
insert into work.result
/* create table work.d as */
select distinct a.id1,
a.id2,
a.id3,
a.id4,
&count
from work.a as a
where input(a.id1,4.) = &id1 and input(a.id2,4.) = &id2 and input(a.id3,4.) = &id3 and input(a.id4,4.) = &id4;
quit;
%end;
%mend;
%a;
|