data tmp;
input x$ y $z ;
cards;
A1 B1 1
A1 B1 2
A1 B1 3
A1 B1 4
A2 B1 5
A2 B1 6
A3 B1 7
A3 B1 8
A1 B2 9
A1 B2 10
A2 B2 11
A2 B2 12
;
run;
proc sort data=tmp out=a ;by x y;run;
data b;
retain num 0;
set a;
by x y;
if first.x or first.y then num=z;else num=sum(z,num);
if last.x or last.y;
run;