数据:
program type code amount
A1 D 1001 100
A1 C 1001 100
A1 D 1002 50
A2 D 1001 100
A2 D 1002 50
A3 C 2000 50
A3 C 1001 100
A3 D 1001 100
A4 D 1002 50
A4 C 1001 100
A4 D 1001 100
……
其中,A1、A2、A3等是活动的名称,code 1001,1002,2000代表费用类型,type D表示收费,C表示退还,amount则是金额
如果相同的code,type D,C同时出现,则金额相等
希望得到,删除相同费用类型,type D,C同时出现的所有观测,在一个program下,最终收费大于0的情况下,其中type为D的观测,如上述数据,处理后应为:
A1 D 1002 50
A2 D 1001 100
A2 D 1002 50
A4 D 1002 50
……
[code:f08bivuc]data raw;
input program $ type $ code amount;
datalines;
A1 D 1001 100
A1 C 1001 100
A1 D 1002 50
A2 D 1001 100
A2 D 1002 50
A3 C 2000 50
A3 C 1001 100
A3 D 1001 100
A4 D 1002 50
A4 C 1001 100
A4 D 1001 100
;
proc sort data=raw out=temp;
by program code;
run;
data temp(drop=sum_amount);
sum_amount=0;
do _n_=1 by 1 until(last.code);
set temp;
by program code;
sum_amount+ifn(upcase(type)='C',-amount,amount);
end;
do _n_=1 to _n_;
set temp;
if sum_amount>0 then output;
end;
run;[/code:f08bivuc]
超市收供货商的促销费?