根据两个变量的总和创建一个变量(一个滞后)
Create a variable based on sum of two variables (one lag)
我有一个像下面这样的数据集,其中数量下降了,但调整仍然存在。对于每一行,金额应该是前一个金额和调整的总和。所以,观察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;
编辑:
现在也在尝试类似的东西,仍然不是我想要的。
%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(),而是使用 RETAIN。
data want ;
set have ;
retain previous ;
if amount = . then amount=sum(previous,adjust);
previous=amount ;
run;
我有一个像下面这样的数据集,其中数量下降了,但调整仍然存在。对于每一行,金额应该是前一个金额和调整的总和。所以,观察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;
编辑:
现在也在尝试类似的东西,仍然不是我想要的。
%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(),而是使用 RETAIN。
data want ;
set have ;
retain previous ;
if amount = . then amount=sum(previous,adjust);
previous=amount ;
run;