SAS: условная сумма по категориям - PullRequest
0 голосов
/ 29 октября 2018

У кого-нибудь есть хорошее решение ниже? Мне нужно подвести итоги наблюдений и взять значение «dist», когда кумулятивная сумма «total» достигает 1000;

data DATA  ;
input ID $ dist total ;
cards ;
A  1.5  600
A  2.5  500
A  3.0  200
B  2.8  1050
B  6.8  100
C  0.8  900
C  1.2  150
C  3.5  300

; run;



Desired output with the third column being optional:
A 2.5 1100
B 2.8 1050
C 1.2 1050

1 Ответ

0 голосов
/ 29 октября 2018

Обработка с сохраненным совокупным итогом и флагом вывода:

data want ;
  set have ;
  by ID ; /* assumes your data is sorted already by ID */
  retain cumtot _out . ;
  if first.ID then call missing(cumtot,_out) ;

  cumtot + total ;

  if cumtot >= 1000 and not _out then do ;
    _out = 1 ; /*   set flag so we don't output further records for this ID */
    output ;
  end ;

  drop _: ;
run ;

Я бы также не стал называть набор данных "data".

...