我一直在尝试使用数组执行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有什么问题吗?请帮助! 非常感谢。
答案 0 :(得分:1)
您正在切断坐着的四肢。
第一种方法适用于I = 1和I = 2,但是当您达到I = 3和I = 4时,prevention
的值已从0
更改为先前的值do循环的迭代。 prevention
和a1(2)
指的是同一件事。