我的SAS代码使用数组问题。结果不符合预期

时间:2019-02-21 20:34:33

标签: 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 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

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

1 个答案:

答案 0 :(得分:1)

您正在切断坐着的四肢。

第一种方法适用于I = 1和I = 2,但是当您达到I = 3和I = 4时,prevention的值已从0更改为先前的值do循环的迭代。 preventiona1(2)指的是同一件事。