Функция SAS lag
вызывает много недоразумений, но как только вы поймете, как она работает, она имеет смысл.Предположим, у вас есть 3 наблюдения, и у вас есть оператор if, который вызывает пропуск второго наблюдения во время обработки.Если вы затем примените функцию задержки к третьему наблюдению, она вернет первое наблюдение, а не второе, потому что в последний раз любое наблюдение было обработано для первого наблюдения.
Чтоэто означает, что будьте осторожны при объединении лагов и операторов if.В вашем коде у вас есть задержка в предложении, которое будет выполнено только в том случае, если оператор if
верен.Это даст вам странные результаты.Вам нужно определить переменную, скажем l_oldreadmit
, равную лагу перед , используя ее в операторе if.
Это будет работать:
l_oldreadmit = lag(oldreadmit);
if (... whatever you have here ...);
else if 0< gap <= 30 then do;
index_d=0;
if l_oldreadmit=1 or oldindex=1 then readmit=1;
else oth=1;
oldindex=index_d;
oldreadmit=readmit;
end;