Thank you so much Jag, the sql code your provide it work, one more problem i encounter, if data change to below, another 2 row data(last 2 row) added in:- 33333 | 54368 | SILVER | 33333SILVER | S | 50 33333 | 94256 | SILVER | 33333SILVER | S | 175 data have;
infile cards dlm='|';
input ACC_NO SUB_ACCNO PRODUCT$ ACC_PLUS_PRODUCT :$20. CATEGORY $ AMT;
cards;
11111 | 12345 | GOLD | 11111GOLD | B | 50
11111 | 24895 | BLACK | 11111BLACK | B | 25
11111 | 24445 | BLACK | 11111BLACK | B | 75
11111 | 27894 | SILVER | 11111SILVER | B | 140
11111 | 23456 | SILVER | 11111SILVER | S | 70
11111 | 86475 | GOLD | 11111GOLD | S | 130
22222 | 34567 | SILVER | 22222SILVER | B | 100
22222 | 12458 | GOLD | 22222GOLD | B | 50
22222 | 12557 | GOLD | 22222GOLD | S | 100
33333 | 23785 | GOLD | 33333GOLD | B | 75
33333 | 12968 | SILVER | 33333SILVER | B | 110
33333 | 12789 | SILVER | 33333SILVER | S | 110
33333 | 54368 | SILVER | 33333SILVER | S | 50 33333 | 94256 | SILVER | 33333SILVER | S | 175
;
proc sql;
create table want(drop=ord sumamt amt cnt) as select *, case when cnt=1 then sum(sumamt) else amt end as sumamt2,case when category='B' then 1 else 2 end as ord from (select *, count(*) as cnt,sum(amt) as sumamt from have
group by ACC_NO, PRODUCT, ACC_PLUS_PRODUCT,CATEGORY) group by ACC_NO, PRODUCT, ACC_PLUS_PRODUCT having min(ord)=ord;
quit; output i get: 11111 24895 BLACK 11111BLACK B 25 11111 24445 BLACK 11111BLACK B 75 11111 12345 GOLD 11111GOLD B 180 11111 27894 SILVER 11111SILVER B 210 22222 12458 GOLD 22222GOLD B 150 22222 34567 SILVER 22222SILVER B 100 33333 23785 GOLD 33333GOLD B 75 33333 12968 SILVER 33333SILVER B 1115 instead of expected outcome: 11111 24895 BLACK 11111BLACK B 25 11111 24445 BLACK 11111BLACK B 75 11111 12345 GOLD 11111GOLD B 180 11111 27894 SILVER 11111SILVER B 210 22222 12458 GOLD 22222GOLD B 150 22222 34567 SILVER 22222SILVER B 100 33333 23785 GOLD 33333GOLD B 75 33333 12968 SILVER 33333SILVER B 445 Thank in advance
... View more