SAS——采用滞后函数

SAS——采用滞后函数,sas,lag,Sas,Lag,我使用下面的代码创建了一个新变量,它通过分隔不同的_ric组来表示close_Middpoint的先前值 data test; set HAVE; lric=lag(_ric); if lric=_ric then lclose_midpoint=lag(close_midpoint); else lclose_midpoint=.; run; 但是,如下图所示,红色方块中的close_中点的滞后值等于上一个ric组中close_中点的最后一个值。例如,观测值7中的lclose_中点应

我使用下面的代码创建了一个新变量,它通过分隔不同的_ric组来表示close_Middpoint的先前值

data test;
set HAVE;
lric=lag(_ric);
if  lric=_ric  then   lclose_midpoint=lag(close_midpoint);
else lclose_midpoint=.;
run;
但是,如下图所示,红色方块中的close_中点的滞后值等于上一个ric组中close_中点的最后一个值。例如,观测值7中的lclose_中点应为4.675,而实际结果中的lclose_中点应为4.2。那么我的代码有什么问题?谢谢

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

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

@Tom显示了如何无条件地使用
滞后
,因此副作用是前一行的值

IFN
可用于与两条语句具有相同的效果

data want;
  set sashelp.cars;
  by make;

  MSRP_lag_within_group = ifn ( first.make , . , lag(MSRP) );

  keep make model MSRP lMSRP;
run;