Sas 使用do循环创建两个变量的函数
我想根据公式计算变量AR_1到AR_99Sas 使用do循环创建两个变量的函数,sas,do-loops,Sas,Do Loops,我想根据公式计算变量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.
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;
尝试:
请记住,SAS宏代码只写文本。因此,下面的赋值,如果已经解决了(由于“J”宏变量不存在,它将不会解决),将为“列”赋值
在随后的步骤中不可能将其重新用作宏变量
为了推广-SAS宏语言编写SAS程序(基本代码),然后执行这些程序以生成结果。您也可以使用数组而不是宏来实现这一点
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;
是的,这很有效,只需要将adm改为adm。另一个很好的解决方案。
&j.=&i.+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;