问题描述
您好,我是一名相当新的 SAS 程序员,正在尝试使用嵌套 do 循环来执行减法函数。目的是使用 1 次循环从 b_1 中减去变量 a_1 到 a_5,然后对所有 a_ 变量(a_1 到 a_4)重复该过程。 我还需要考虑缺失的数据,我目前使用的代码将所有值都作为缺失值。
代码:
data test1;
set test;
array b [4] b_1 - b_4;
array c [4] c_1 - c_4;
array a [5] a_1 - a_5;
do j=1 to j=4;
c_j=0;
if not missing (b_j) then do i = 1 to 5;
c_j = (0 le (b_j- a (i)) le 30);
if c_j = 1 then leave;
end;
if (a_1 - a_5) | b_j = . then c_j = .;
if c_j=1 then c_j=year(b_j);
end;
drop i j;
run;
解决方法
要索引到数组中,请使用 array_name[index]
而不是 array_name_index
。
if not missing( b[j] ) then
请注意,您不需要使用方括号:您也可以使用大括号 b{j}
或正则括号 b(j)
。
do 循环永远不会执行,因为 0 的上限小于起始值 1。表达式 j=4
的值要么为真 (1),要么为假 (0),具体取决于J 的值,并且在确定上限时 J 不可能得到 4 的值。要将 J 从 1 迭代到 4,请使用:
do j=1 to 4;