Я довольно новый с do loops в SAS, и я знаю, что я пытаюсь заставить этот цикл работать как скрипт MATLAB. Я не нашел много полезных советов в Интернете, поскольку большинство примеров do-loop предназначены только для вычислений, а не для проверки того, имеет ли строка перед текущим одно значение.SAS Do-Loop и IF Statement для сравнения значений текущей и предыдущей строк
Вот мой вопрос, что мне нужно решить:
Я хочу посмотреть на каждый номер политики ниже и посмотреть, если один, прежде чем то же самое, если я хочу, чтобы пометить его.
Policy
26X0118907
26X0375309
26X0375309
26X0527509
Я бы считал i=1
быть первой политики (26X0118907
) и i=2
быть второй курс (26X0375309
).
В этом случае в соответствии с кодом (который не работает) ниже этого приращения будет помечен как «B». Знаете ли вы, как правильно кодировать такую ситуацию?
data AF_Inforce_&thestate.;
set AF_Inforce_&thestate.;
by Rating_St;
if first.Rating_St then counter=0;
counter+1;
myloop:
do i=2 to counter;
P2(i)=Policy(i);
P1(i)=Policy(i-1);
if P1(i)=P2(i) then flag='A';
else flag='B';
end;
return;
run;
Я бы воздержался от использования функции lag(), за исключением редких случаев, когда вам нужно несколько лаг в одно и то же время. (Например, http://stackoverflow.com/questions/25898255/sas-do-loops-use-loop-variable-inside-the-loop-to-create-lagged-variables). Причина этого заключается в том, что «отставание () 'слишком легко неправильно используется и неправильно понимается, особенно когда присутствует условная логика. Если ваш оператор 'if' был преобразован в вложенные операторы' if', тогда результаты будут изменены без уведомления пользователя. Это может привести к жестким отладкам и необнаруженным ошибкам. Обработка по группам намного безопаснее. –