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;
4

2 回答 2

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”宏变量不存在),就会给“列”赋值。

  &j.=&i.+1;

这不能在后续步骤中重新用作宏变量。

概括 - SAS 宏语言编写 SAS 程序(基本代码),然后执行以产生结果。

于 2014-11-19T10:18:29.313 回答
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;
于 2014-11-19T14:25:37.347 回答