data test;
input g $ z t;
a 11 18
a 6 .
a 4 .
a 3 .
b 9 0
b 4 .
c 7 5
c 3 .
d
.
.
;
对于data test,t 总是被group(g)里的第一个z 值减,如果有余额,则余额被第二个减,以此类推,直至余额为零。
比如,在group a里,18首先被11扣除,余7,然后7 又被6减,余1,然后再被4 减,余额为零,至此,该group的运算结束。
(m 为被减去的t值,你也可以不用这个)。
g z t m
a 11 18 11
a 6 7 6
a 4 1 1
a 3 0 0
余下几个group同样的规律进行计算,如果每group的t值为零,则无需往下进行,如果每group里的t值小于z 但大于零,则就在本行你进行计算。
问题就是这样的,程序该如何写?谢谢!
[code:36xipyle]data test;
input g $ z t;
datalines;
a 11 18
a 6 .
a 4 .
a 3 .
b 9 0
b 4 .
c 7 5
c 3 .
;
data temp(drop=temp);
retain temp;
do _n_=1 by 1 until(last.g);
set test;
by g;
t=ifn(_n_=1,t,temp);
temp=max(t-z,0);
m=t-temp;
output;
end;
run;[/code:36xipyle]