У меня есть набор данных, подобный приведенному ниже, где сумма выпала, но настройка остается. Для каждой строки сумма должна быть суммой предыдущей суммы и корректировки. Таким образом, сумма для наблюдения 5 составляет 134 (124 + 10).Создайте переменную, основанную на сумме двух переменных (один лаг)
У меня есть ответ, который дает мне следующее значение, но мне нужна какая-то рекурсия, чтобы получить от меня остальную часть пути. Что мне не хватает? Благодарю.
data have;
input amount adjust;
cards;
100 0
101 1
121 20
124 3
. 10
. 4
. 3
. 0
. 1
;
run;
data attempt;
set have;
x=lag1(amount);
if amount=. then amount=adjust+x;
run;
data want;
input amount adjust;
cards;
100 0
101 1
121 20
124 3
134 10
138 4
141 3
141 0
142 1
;
run;
EDIT:
пытается что-то также, как это сейчас, до сих пор не совсем то, что я хочу.
%macro doodoo;
%do i = 1 %to 5;
data have;
set have;
/* if _n_=i+4 then*/
amount=lag1(amount)+adjust;
run;
%end;
%mend;
%doodoo;
Причина, по которой ваш подход к задержке не работает, заключается в том, что lag возвращает предыдущее значение как последнее прочитанное из оператора set, а не значение, как это было в конце предыдущей итерации шага данных. – user667489