SAS---滞后函数的采用

SAS---the adoption of lag function

我使用以下代码创建了一个新变量,通过分隔不同的 _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。那么我的代码有什么问题呢?谢谢

LAG() 不采用先前观察的值。它创建自己的堆栈并从先前调用中传递给它的值中获取值。由于您只是有条件地调用 LAG(),因此它无法找到您想要的值。

data test;
  set HAVE;
  by _ric ;
  lclose_midpoint=lag(close_midpoint);
  if not first._ric then lclose_midpoint=.;
run;

@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;