как сделать это суммирование в SAS

id      qty  totalqty
0001    1    1
0002    2    2
0002    5    7
0003    7    7
0006    3    3
0006    4    7

id уже отсортирован по порядку. Я хочу суммировать количество, если идентификатор такой же, как показано выше. Таким образом, появится новая переменная с именем totalqty. Ниже приведен мой код SAS. Каким-то образом одни строки правильные, а другие неправильные

data new; set new;
    totalqty=qty;
        if id = lag1(id) then do;
            totalqty = lag1(totalqty)+qty;
        end;
run;

Может ли кто-нибудь помочь мне с этим? Большое спасибо!


person Richard RAo    schedule 11.11.2014    source источник
comment
Никогда не используйте функцию LAG в условном операторе. Всегда выполняйте функцию LAG1, но используйте ее только в том случае, если условие истинно.   -  person Jay Corbett    schedule 13.11.2014
comment
Ладно, я понял. Большое спасибо!   -  person Richard RAo    schedule 13.11.2014


Ответы (2)


Как насчет этого?

DATA WANT;
    SET HAVE;
    BY ID;
    IF FIRST.ID AND LAST.ID THEN TOTALQTY = QTY;
    ELSE IF FIRST.ID THEN TOTALQTY = QTY;
    ELSE TOTALQTY+QTY;
RUN;
person user2337871    schedule 11.11.2014
comment
Спасибо еще раз. Кстати, не могли бы вы сказать мне, где ошибка для моего предыдущего кода, как показано выше? - person Richard RAo; 11.11.2014
comment
кое-что, что неочевидно в этом решении, заключается в том, что TOTALQTY+QTY вызывает сохранение TOTALQTY... если бы это было указано как TOTALQTY=TOTALQTY+QTY, потребовался бы явный оператор RETAIN TOTALQTY. - person Jay Corbett; 13.11.2014

Немного проще, так как первые два условия совпадают.

ДАННЫЕ НУЖНЫ; УСТАНОВИТЬ ИМЕТЬ; ПО ID; ЕСЛИ ПЕРВЫЙ ИДЕНТИФИКАТОР, ТО ВСЕГО КОЛ-ВО = КОЛ-ВО; ЕЩЕ ВСЕГО КОЛ-ВО+КОЛ-ВО; БЕЖАТЬ;

person Reeza    schedule 11.11.2014