SAS在累积循环中的累积和

时间:2017-11-16 18:34:49

标签: loops sas cumulative-sum do-loops

您好我想在变量上使用group by创建累积和,但我想将它嵌套在do until循环中。但是我无法获得正确的总和价值。

我希望将呼叫从1增加到8(最大),直到满足“do until”中的条件。基本上我想知道总添加的呼叫(累计),然后将其与条件

进行比较
DATA DAS.UNDER_2;
SET UNDER_1;
BY TERR;
  DO i = 1 TO 8 UNTIL (CUMM >= (285 - ADJUSTED_WL));

  CALLS = i;

  IF FIRST.TERR THEN CUMM = CALLS;
  ELSE CUMM + CALLS;

  IF (CUMM > (285 - ADJUSTED_WL)) THEN  CALLS = 0;
 END;

这是我得到的结果:

+------+-------------+-------+------+
| TERR | ADJUSTED_WL | CALLS | CUMM |
+------+-------------+-------+------+
| A    |          10 |     2 |    2 |
| A    |          10 |     2 |    5 |
| A    |          10 |     2 |    8 |
| B    |          20 |     2 |    2 |
| B    |          20 |     2 |    5 |
| B    |          20 |     2 |    8 |
| C    |          30 |     2 |    2 |
| C    |          30 |     2 |    5 | 
| C    |          30 |     2 |    8 |
+------+-------------+-------+------+

然而,CUMM应该是Calls列的累积总和,如2,4,6,8 ..

1 个答案:

答案 0 :(得分:1)

我在这里很容易找到一个例子: https://communities.sas.com/t5/SAS-Procedures/How-do-I-create-a-cumulative-total-column-subset-by-another/td-p/91118

数据输入:

data have;
input ID  AMT;
cards;
10 150
10 100
25 150
25 150
25 150
30 600
30 300
run;

使用另一列sumbyid:

data want;
  set have;
  by id notsorted;
  if first.id then sumbyid=0;
    sumbyid+amt;
run;

结果:

                    Obs    ID    AMT    sumbyid


                     1     10    150      150

                     2     10    100      250

                     3     25    150      150

                     4     25    150      300

                     5     25    150      450

                     6     30    600      600

                     7     30    300      900

此致