动态设置数组大小而不进行硬编码

时间:2016-11-30 19:40:18

标签: arrays sas

所以我的数据集包含变量和值,如下所示:

A1 A2 A3 A4 A5 A6
1  3  5  6  10 2

在某些情况下,变量可以达到A2000。我想使用数组对每个变量执行相同的操作。有没有办法动态设置数组的大小而无需手动输入?

我正在努力的示例代码在

之下
data A;
input A1-A6;
datalines;
1 3 5 6 10 2;
run;

data A;
set A;
array a[*] a1-a&size;
do i=1 to &size;
{perform some operation here}
end;
run;

我的问题是如何编写代码来获取表示数组大小的参数和大小?在此示例中,& size = 6。

1 个答案:

答案 0 :(得分:1)

当然,请使用:通配符。这只适用于数据集中已经定义a1-a6(或者无论如何)的情况。

data have;
  input a1-a6;
datalines;
1 2 3 4 5 6
7 8 9 10 11 12
;;;;
run;

data want;
  set have;
  array a a:;
  do i=1 to dim(a);
    sum = sum(sum ,a[i]);
  end;
run;

否则,你上面提到的内容绝对有用。但是,您不需要[*]位,我更喜欢在循环控件上保留dim而不是&size,以防您在将来更改其工作方式。当然,您需要有一种方法来确定&size,这取决于您的数据。

%let size=6;
data want;
  set have;
  array a a1-a&size.;
  do i=1 to dim(a);
    sum = sum(sum ,a[i]);
  end;
run;