SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 858|回复: 2
打印 上一主题 下一主题

如何做这个减法?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2010-5-7 14:29:31 | 只看该作者

如何做这个减法?

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 但大于零,则就在本行你进行计算。
问题就是这样的,程序该如何写?谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2010-5-7 15:30:39 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2010-5-8 10:04:12 | 只看该作者

Re: 如何做这个减法?

great and learn a new stuff, thanks a bunch!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-4 06:42 , Processed in 0.078127 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表