SAS --- принятие функции задержки - PullRequest
1 голос
/ 09 марта 2019

Я использовал следующий код для создания новой переменной, которая представляет предыдущее значение close_midpoint путем разделения другой группы _ric.

data test;
set HAVE;
lric=lag(_ric);
if  lric=_ric  then   lclose_midpoint=lag(close_midpoint);
else lclose_midpoint=.;
run;

Однако, как показано на следующем рисунке, значение лага close_midpoint в красном квадрате равно последнему значению close_midpoint в предыдущей группе _ric. Например, точка lclose_midpoint в наблюдении 7 должна быть 4,675, тогда как в фактическом результате она равна 4,2. Так в чем же проблема в моем коде? Спасибо.

enter image description here

Ответы [ 2 ]

1 голос
/ 09 марта 2019

LAG () не принимает значение из предыдущего наблюдения. Он создает свой собственный стек и получает значение из значений, которые были переданы ему при предыдущих вызовах. Поскольку вы вызываете только LAG () условно, у него нет возможности найти нужные значения.

data test;
  set HAVE;
  by _ric ;
  lclose_midpoint=lag(close_midpoint);
  if not first._ric then lclose_midpoint=.;
run;
0 голосов
/ 09 марта 2019

@ 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...