sas создает переменную с циклом do

У меня есть следующий код:

data DEFBIS.Taux_fec_2006_2010;
set DEFBIS.Taux_fec_2006_2010;
  Taux_15 = 1000 * N_15 / (5 * P_15);
  Taux_16 = 1000 * N_16 / (5 * P_16);
  ...
  Taux_49 = 1000 * N_49 / (5 * P_49);
run;

Как я могу сократить этот код, используя оператор do из i = 15 to 49?


person user2568648    schedule 30.09.2014    source источник


Ответы (2)


Два пути, по которым можно пойти...

1.Макро

%macro do_loop;

data DEFBIS.Taux_fec_2006_2010;
set DEFBIS.Taux_fec_2006_2010;

%do i = 15 %to 49;
  Taux_&i. = 1000 * N_&i. / (5 * P_&i.);
%end;

run;

%mend do_loop;

%do_loop;

2.массивы

data DEFBIS.Taux_fec_2006_2010;
set DEFBIS.Taux_fec_2006_2010;

array taux (*) taux_1 -- taux_49;
array N (*) N_1 -- N_49;
array P (*) P_1 -- P_49;

do I = 15 to 49;
  Taux (I)= 1000 * N (I)/ (5 * P (I));
end;

run;
person Chris    schedule 30.09.2014
comment
Ваши массивы должны идти от 15 до 49, а не от 1 до 49. Код будет работать, но вы получите нежелательные переменные 1–14. - person Longfish; 30.09.2014
comment
Спасибо всем. Я безуспешно пробовал метод do loop - я просто пропустил . после я. - person user2568648; 30.09.2014
comment
В данном случае подход с использованием массивов гораздо более уместен, чем подход с использованием макросов. - person Robert Penridge; 01.10.2014

Я бы не стал использовать макросы. Используйте массив, но явно установите индекс от 15 до 49.

data DEFBIS.Taux_fec_2006_2010;
set DEFBIS.Taux_fec_2006_2010;

array taux(15:49) taux_15-taux_49;
array nn(15:49) n_15-n_49;
array pp(15:49) p_15-p_49;

do i=15 to 49;
  Taux(i) = 1000 * nn(i)/ (5 * pp(i));
end;

run;
person Reeza    schedule 30.09.2014