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

时间:2014-11-19 10:12:23

标签: 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.);
%end;

run;

%mend do_loop;

%do_loop;

2 个答案:

答案 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;