Here is another way to generate the data you want, just using PROC SUMMARY:
proc summary data=table order=freq;
class value1 value2;
by name surname;
output out=counts;
run;
data want;
merge
counts(where=(_type_=2) drop=value2)
counts(where=(_type_=1) drop=value1)
;
by name surname;
if first.surname;
drop _:;
run;
... View more