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

С уважением

Другие вопросы по тегам