SAS Накопительная сумма в цикле до
Привет, я хочу создать кумулятивную сумму, используя group by для переменной, но я хочу вложить ее в цикл до. Но я не могу получить правильное значение суммы.
I want to increase calls incrementally from 1 to 8(being max) till the condition in "do until" is satisfied. Basically I want to know the total added calls(cumulative) and then compare it with the condition
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 |
+------+-------------+-------+------+
Whereas, the CUMM should be cumulative sum of the Calls column like 2, 4, 6, 8..
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;
С другой колонкой сумбид:
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
С уважением