如何在SAS宏数据步骤中使用循环

时间:2019-02-01 17:04:28

标签: macros sas sas-macro

我需要在写入数据步骤的SAS宏中使用循环

我有一个应该工作的代码,但是没有。我该如何解决?

%macro ci;
data 
%do i=1 %to 3;
  _z%sysfunc(putn(%eval(&i),z2.)) ;
%end;
;
set _06;
%do i=1 %to 3;
  if num="%sysfunc(putn(%eval(&i),z2.))" then output _z%sysfunc(putn(%eval(&i),z2.));
%end;
run;
%mend;

%ci;

我想得到以下输出:

data 
_z01
_z02
_z03;
set _06 ;
if num="01" then output _z01;
if num="02" then output _z02;
if num="03" then output _z03;
run;

2 个答案:

答案 0 :(得分:3)

您非常亲密。您在第一个循环中只是有一个额外的;

您需要更改:

data 
%do i=1 %to 3;
  _z%sysfunc(putn(%eval(&i),z2.)) ;
%end;
;

收件人:

data 
%do i=1 %to 3;
  _z%sysfunc(putn(%eval(&i),z2.)) 
%end;
;

在代码的开头添加option mprint;将向您显示从宏语句生成的代码,并帮助您调试它。

答案 1 :(得分:0)

如果您要使用更简单的方法,而不是将数字转换为字符,怎么办

data _06;
num='01';
output;
num='02';
output;
num='03';
output;
run;

%macro ci;
data 
%do i=1 %to 3;
    _z0&i
%end;
;
set _06;
%do i=1 %to 3;
  if num="0&i" then output _z0&i;
%end;
run;
%mend;

%ci;