2016-11-30 6 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; 

Мой вопрос, как я могу писать код, чтобы получить параметр & размер, представляющий размер массива? В этом примере & размер = шесть.

ответ

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

это замечательно! благодаря! – crayfishcray

Смежные вопросы