data test1;
set have(rename=(x=x_ id=id_));
do i=1 to nobs;
set have point=i nobs=nobs;
if id_ ne id then do;
if x = x_ then do;
newid=cats(put(min(id_,id),best.),',',put(max(id_,id),best.));
flg=1;
output;
end;
else if x ne x_ then do;
newid=cats(put(min(id_,id),best.),',',put(max(id_,id),best.));
flg=2;
output;
end;
end;
end;
run;
proc sort data=test1 out=test2(keep=newid x_ flg);
by newid x_ flg;
run;
data test3;
set test2;
by newid x_ flg;
if first.x_;
run;
proc sql;
create table want as
select tranwrd(newid,',',ifc(flg=1,'and','not',' ')) as id, x_ as x, case
when flg=1 then cats(put(sum(flg=1),best.),'/',put(count(newid),best.))
when flg=2 then cats(put(sum(flg=2),best.),'/',put(count(newid),best.))
end as over
from test3
group by newid
order by newid, x_;
quit;