proc sort data=aaa;
by var2;
run;
data bbb;
set aaa;
by var2;
retain y;
if first.var2 then y=x;
run;
proc sort data=bbb out=ccc(drop=y);
by descending y;
run;
data aaa;
input var1 $ var2 $ x;
cards;
ttl aa 5
l1 aa 3
l2 aa 2
l3 aa 0
ttl bb 8
l1 bb 5
l2 bb 3
l3 bb 0
ttl cc 6
l1 cc 6
l2 cc 0
l3 cc 0
;
run;
proc transpose data=aaa out=bbb;
by var2;
id var1;
var x;
run;
proc sort data=bbb;
by descending ttl;
run;
data ccc;
set bbb;
array level{4} ttl l1 l2 l3;
do i=1 to 4;
if ^missing(level{i}) then levelv=level{i};
varname=vname(level{i});
output;
end;
keep var2 varname levelv;
run;