data test;
input id $4. card_type $10. card_cat $20. card_limit;
cards;
001 visa primary 3000
001 visa supplementary 3500
001 master supplementary 2000
002 master primary 5000
002 visa primary 4000
003 visa supplementary 2000
004 master supplementary 2500
;
proc sql;
create table want as
select id,
sum(case when card_type='visa' then 1 else 0 end) as total_visa,
sum(case when card_type='master' then 1 else 0 end)as total_master,
sum(case when card_cat='primary' then 1 else 0 end)as total_pri,
sum(case when card_cat='supplementary' then 1 else 0 end)as total_sec,
sum(card_limit) as total_limit
from test
group by id;
quit;