SAS中文论坛

标题: 如何做这个减法? [打印本页]

作者: shiyiming    时间: 2010-5-7 14:29
标题: 如何做这个减法?
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 但大于零,则就在本行你进行计算。
问题就是这样的,程序该如何写?谢谢!
作者: shiyiming    时间: 2010-5-7 15:30
标题: Re: 如何做这个减法?
[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]
作者: shiyiming    时间: 2010-5-8 10:04
标题: Re: 如何做这个减法?
great and learn a new stuff, thanks a bunch!




欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/) Powered by Discuz! X3.2