使用阵列时我的sas代码出现问题。结果并不像预期的那样

使用阵列时我的sas代码出现问题。结果并不像预期的那样,sas,Sas,我一直在尝试使用数组执行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

我一直在尝试使用数组执行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/的结果是正确的,这正是我想要的:

但是使用/method1/,我得到以下输出:

方法1有什么问题吗?请帮忙!
非常感谢。

您正在切断您所坐的肢体

第一种方法适用于I=1和I=2,但当达到I=3和I=4时,do循环的早期迭代将预防值从0更改为缺失。预防和a12指的是同一件事