SAS ---采用滞后功能

时间:2019-03-08 21:15:33

标签: sas lag

我使用以下代码通过分隔不同的_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。那么我的代码有什么问题呢?谢谢。

enter image description here

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;