2017-01-11 95 views
1

我的问题是关于SAS中的条件累计金额。我认为使用样本可以更好地解释这一点。我有以下数据集:SAS_Conditional累计金额

Date     Value 
01/01/2001   10 
02/01/2001   20 
03/01/2001   30 
04/01/2001   15 
05/01/2001   25 
06/01/2001   35 
07/01/2001   20 
08/01/2001   45 
09/01/2001   35 

我想查找值的累积和。我的情况是如果累计总和超过70,应该是70,下累计总和应来自70过多的价值就开始等等。更preciesly,我的新的数据应该是:

Date     Value Cumulative 
01/01/2001   10  10 
02/01/2001   20  30 
03/01/2001   30  60 
04/01/2001   15  70 
05/01/2001   25  30 (75-70=5+25=30) 
06/01/2001   35  65 
07/01/2001   20  70 
08/01/2001   45  60 (85-70=15+45=60) 
09/01/2001   35  95 (because its last value) 

许多在此先感谢

回答

1

这是一个解决方案,但必然会有一个更优雅。它与if eof分成两部分以满足最后的观察条件。

data want; 
    set test end = eof; 

    if eof ^= 1 then do; 

    if cumulative = 70 then cumulative = extra; 

    Cumulative + value; 
    extra = cumulative - 70; 

    if extra > 0 then do; 
     cumulative = 70; 
    end; 
    end; 

    retain extra; 
    retain cumulative; 

    if eof = 1 then cumulative + value; 

run; 
+0

有可能是一个更优雅的,但我真的很喜欢你的。它还处理OP未提及的条件,例如> 70的剩余部分,所以额外需要被推到多行(可能远至最后一行)。 – vknowles

+0

非常感谢。 – Khalid