2016-11-30 40 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