我有10个观察数据集,有6个字符变量作为天和城市。 对于具有日期名称的变量,每个变量都具有日期名称或缺失值“NA”的观察值。同样,对于具有城市名称的变量,每个变量都有城市名称或缺失值“NA”。 我想用SAS二维数组计算这些字符变量中缺失值的数量,作为练习的一部分。我得到的日志消息遵循以下代码。
data want;
set have;
array var{2,3} i_Day5 Day6 Day7 City1-City3;
array m{2} 8;
do i=1 to 3;
do j=1 to 3;
m{i}=sum(m{i},ifn(var{i,j}="NA",0,1));
end;
end;
run;
日志显示警告
WARNING: An array has been declared with the same name as a built in
or user defined function.
References to var() will refer to the array definition, not the function call.
我收到以下错误:
Array subscript 3 out of range [1-2] for dimension 1 of array m at line 254 column 1
当存在不存在的记录时,可能会发生错误。请让我知道你有什么提示来解决这个错误。
答案 0 :(得分:2)
WARNING来自声明一个名为VAR
的数组,它将在DATA步骤中用来代替VAR
函数,通常"返回非缺失参数的方差。&# 34;
发生错误是因为数组m
被声明为{2}
- 这意味着它有两个可寻址的索引,即1
和2
。
当i
循环索引转到3
时,您试图访问m{3}
并发生错误。
当处理循环遍历数组的代码时,由于编码实验或宏变量分辨率,边界可能会有所不同,最安全的迭代DO LOOP
将使用LBOUND
和HBOUND
函数启动和停止值。这些函数返回数组维度的最低和最高索引。
do rowIndex = lbound(var,1) to hbound(var,1);
do colIndex = lbound(var,2) to hbound(var,2);
m{rowIndex} = ...;
end;
end;