Sas 使用do循环创建两个变量的函数

Sas 使用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_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;
尝试:

请记住,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;