我使用以下代码通过分隔不同的_ric组来创建一个表示close_midpoint先前值的新变量。
data test;
set HAVE;
lric=lag(_ric);
if lric=_ric then lclose_midpoint=lag(close_midpoint);
else lclose_midpoint=.;
run;
但是,如下图所示,红色方块中close_midpoint的滞后值等于上一个_ric组中close_midpoint的最后一个值。例如,观察值7中的lclose_midpoint应该为4.675,而实际结果中为4.2。那么我的代码有什么问题呢?谢谢。
答案 0 :(得分:1)
LAG()不采用上一个观察值。它创建自己的堆栈,并从先前调用传递给它的值中获取值。由于您仅有条件地调用LAG(),因此无法找到所需的值。
data test;
set HAVE;
by _ric ;
lclose_midpoint=lag(close_midpoint);
if not first._ric then lclose_midpoint=.;
run;
答案 1 :(得分:0)
@Tom显示如何无条件使用lag
,因此副作用是前一行的值。
IFN
可以起到与两个语句相同的作用。
data want;
set sashelp.cars;
by make;
MSRP_lag_within_group = ifn ( first.make , . , lag(MSRP) );
keep make model MSRP lMSRP;
run;