SAS二维数组,用于计算跨行

时间:2018-04-24 17:49:59

标签: arrays sas

我有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

当存在不存在的记录时,可能会发生错误。请让我知道你有什么提示来解决这个错误。

1 个答案:

答案 0 :(得分:2)

WARNING来自声明一个名为VAR的数组,它将在DATA步骤中用来代替VAR函数,通常"返回非缺失参数的方差。&# 34;

发生错误是因为数组m被声明为{2} - 这意味着它有两个可寻址的索引,即12

i循环索引转到3时,您试图访问m{3}并发生错误。

当处理循环遍历数组的代码时,由于编码实验或宏变量分辨率,边界可能会有所不同,最安全的迭代DO LOOP将使用LBOUNDHBOUND函数启动和停止值。这些函数返回数组维度的最低和最高索引。

do rowIndex = lbound(var,1) to hbound(var,1);
  do colIndex = lbound(var,2) to hbound(var,2);
    m{rowIndex} = ...;
  end;
end;