序列的宏

时间:2017-09-17 10:06:14

标签: macros sas sequence

嘿,我现在正在尝试学习SAS,而我正在尝试编写一个简单的宏。 该宏应该将两个数字之间的序列打印到日志中。 例如%seq(1,4)导致

1

2

3

4

打印出来的。不幸的是,我不知道如何做到这一点并且在网上找不到任何东西。有人有想法吗?

由于

2 个答案:

答案 0 :(得分:0)

有几种方法可以实现这一点,这里有一个:

%macro seq(x,y);
%do %until (&x>&y);
  %put &x;
  %let x=%eval(&x+1);
%end;
%mend;

%seq(1,4)

答案 1 :(得分:0)

目前尚不清楚你想在这里做什么。如果您只想生成一系列数字,而不需要将宏作为数据步骤,则DO语句可以非常轻松地完成。

data _null_;
  do seq=1 to 4 ;
     put seq= ;
  end;
run;

为了使其更灵活,您可以使用宏变量替换常量14

%let start=1;
%let end=4;
data _null_;
  do seq=&start to &end ;
     put seq= ;
  end;
run;

为了使其更具可重用性,您可以将其包装到宏中。

%macro seq(start,end);
data _null_;
  do seq=&start to &end ;
     put seq= ;
  end;
run;
%mend seq ;
%seq(1,4)

你甚至可以使用宏%DO循环,如果数据步骤DO循环你不需要在宏中生成实际的SAS代码。

%macro seq(start,end);
%local seq;
  %do seq=&start %to &end ;
     %put seq= &seq;
  %end;
%mend seq ;
%seq(1,4)