2016-11-30 35 views
2

所以我有一个变量的数据集和值,像这样:动态设置数组的大小没有硬编码

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

当然,请使用:通配符。但是,只有在数据集中已经定义了a1-a6(或a-whatever)的情况下才有效。

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; 
+0

这太好了!谢谢! – crayfishcray