При написании очень простого шага DATA для начала нового проекта я столкнулся с некоторым странным поведением.
Единственное различие между set1 и set2 заключается в использовании переменной lagscore в уравнении между set1 ификтивная фигура в уравнении в set2.
set1 создает вывод, который указывает на то, что включение lagscore приводит к тому, что переменные счета и lagscore становятся неопределенными в половине итераций.
Обратите внимание, что я был осторожен сНЕ вызывайте lag () более одного раза, и я включаю вызов в set2 просто для того, чтобы убедиться, что вызов функции lag () не является источником проблемы.
Я ценю любые объяснения.Я довольно долго отсутствовал в SAS и чувствую, что мне не хватает чего-то принципиального в том, как происходит обработка.
(Извините за трудный для чтения вывод. Я не мог понять, как его вставить исохранить интервал)
data set1;
obs=1;
score=500;
a_dist = -5.0;
b_dist = 0.1;
dummy = 0;
output;
do obs = 2 to 10;
lagscore = lag(score);
score = lagscore + 1 /(b_dist * lagscore + a_dist);
output;
end;
run;
data set2;
obs=1;
score=500;
a_dist = -5.0;
b_dist = 0.1;
dummy = 0;
output;
do obs = 2 to 10;
lagscore = lag(score);
/* score = lagscore + 1 /(b_dist * lagscore + a_dist);*/
score = dummy + 1 /(b_dist * dummy + a_dist);
output;
end;
run;`
Результаты Set1
obs score a_dist b_dist dummy lagscore
1 500 -5 0.1 0 .
2 . -5 0.1 0 .
3 500.02 -5 0.1 0 500
4 . -5 0.1 0 .
5 500.04 -5 0.1 0 500.02
6 . -5 0.1 0 .
7 500.06 -5 0.1 0 500.04
8 . -5 0.1 0 .
9 500.08 -5 0.1 0 500.06
10 . -5 0.1 0 .
Результаты Set2
obs score a_dist b_dist dummy lagscore
1 500 -5 0.1 0 .
2 -0.2 -5 0.1 0 .
3 -0.2 -5 0.1 0 500
4 -0.2 -5 0.1 0 -0.2
5 -0.2 -5 0.1 0 -0.2
6 -0.2 -5 0.1 0 -0.2
7 -0.2 -5 0.1 0 -0.2
8 -0.2 -5 0.1 0 -0.2
9 -0.2 -5 0.1 0 -0.2
10 -0.2 -5 0.1 0 -0.2