您好我想在变量上使用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 ..
答案 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
此致