Проблема с моим кодом SAS с использованием массива.Результат не такой, как ожидалось - PullRequest
0 голосов
/ 21 февраля 2019

Я пытался выполнить код sas с использованием массивов.Странно, это не работает так, как я ожидал.Поэтому я использовал другой подход, и код работает нормально со вторым методом.Но все же я хочу знать, что это не так с первым методом.Вот мой код:

data have;
input free_m prevention substitution oth;
datalines;
. . . .
. 0 0 0
1 1 0 0
;
run;

data test;
set have;
/*method1*/
array a1(*) prevention substitution oth;
do i=1 to dim(a1);
    if free_m=. and prevention=0 and substitution=0 and oth=0 then a1(i)=.;
end;

/*method2*/
/*
if free_m=. and prevention=0 and substitution=0 and oth=0 then 
do;
    prevention=.;
    substitution=.;
    oth=.;
end;
*/
drop i;
run;

proc sql;
select * from test;
quit;

Результат с / method2 / правильный, и это то, что я хочу:

enter image description here

Но с / method1 / я получаю следующий вывод:

enter image description here

Что-то не так вmethod1?Пожалуйста, помогите!Большое спасибо.

1 Ответ

0 голосов
/ 21 февраля 2019

Вы отсекаете конечность, на которой сидите.

Первый метод отлично работает для I = 1 и I = 2, но когда вы получаете I = 3 и I = 4, значения prevention было изменено с 0 на отсутствующее в предыдущих итерациях цикла do.prevention и a1(2) относятся к одному и тому же.

...