我想根据公式计算变量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;
答案 0 :(得分: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宏代码仅写入TEXT。所以下面的任务,如果它已经解决(它不会因为" J"宏变量不存在),就会为"列分配一个值&# 34。
&j.=&i.+1;
然后在随后的步骤中不能将其重新用作宏变量。
概括 - SAS宏语言编写SAS程序(基本代码),然后执行以生成结果..
答案 1 :(得分: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;