2014-11-19 5 views
1

Я хотел бы рассчитать переменные AR_1 к AR_99 на основании формулыСоздать функцию двух переменных с делают петлю

AR_(i) = 0.5*(ADM_(i) + ADM_(j)) 

, где J = I + 1 (ADM_1 к ADM_100 уже существуют в наборе данных). Однако, используя следующий цикл do, я получаю сообщение об ошибке, поскольку SAS не распознает переменную j.

%macro do_loop; 

data testdo; 
set Popn99; 

%do i = 1 %to 99; 
    &j.=&i.+1; 
    AR_&i. = 0.5 * (ADM_&i. + ADM_&j.); 
%end; 

run; 

%mend do_loop; 

%do_loop; 

ответ

2

попробовать:

%macro do_loop; 

data testdo; 
set Popn99; 

%do i = 1 %to 99; 
    AR_&i. = 0.5 * (ADM_&i. + ADM_%eval(&i.+1)); 
%end; 

run; 

%mend do_loop; 

%do_loop; 

Помните, что SAS Macro код записывает только текст. Итак, следующее задание, если оно разрешилось (что не будет, поскольку макрос-переменная «J» не существует), присвоила значение «столбцу».

&j.=&i.+1; 

Это не могло быть использовано повторно в качестве макропеременной на последующем этапе.

Обобщить - SAS Macro язык пишет SAS программы (базовый код), который затем последовательно выполнить для получения результатов ..

1

Вы также можете использовать массивы вместо макроса для достижения этой цели.

data testdo; 
set popn99; 
array adm(100) adm1-adm100; 
array ar(99) ar1-ar99; 
do i = 1 to 99; 
    ar[i] = 0.5 * (adm[i] + adm[i+1]); 
end; 
drop i; 
run; 
+0

Да, это работает, просто нужно сменить adm на adm_. Еще одно приятное решение. – user2568648

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

  • Нет связанных вопросов^_^