data DB1;
input cat1 cat2 cat3 cat4 cat5 place value;
cards;
0 0 0 0 0 1 125
0 0 0 0 0 2 33
0 0 0 0 0 3 44
0 0 1 0 0 1 2
0 0 1 0 0 2 .
0 0 1 0 0 3 1
0 1 0 0 0 1 .
0 1 0 0 0 2 .
0 1 0 0 0 3 .
0 1 0 1 0 1 65
0 1 0 1 0 2 36
0 1 0 1 0 3 43
0 1 1 0 0 1 .
0 1 1 0 0 2 .
0 1 1 1 0 1 4
0 1 1 1 0 2 2
1 0 0 0 0 1 164
1 0 0 0 0 2 516
1 0 0 0 0 3 619
1 0 1 0 0 1 5
1 0 1 0 0 2 1
1 0 1 0 0 3 2
;
proc sql;
create table want as
select 0 as cat,place,sum(value) as value from DB1 where sum(cat1,cat2,cat3,cat4,cat5)=0 group by place
union
select 1,place,sum(cat1*value) from DB1 group by place
union
select 2,place,sum(cat2*value) from DB1 group by place
union
select 3,place,sum(cat3*value) from DB1 group by place
union
select 4,place,sum(cat4*value) from DB1 group by place
union
select 5,place,sum(cat5*value) from DB1 group by place
;
quit;