宏中 do 循环插入的空白

blanks inserted by do loops in macros

我是SAS的初学者,刚开始学习宏,这个例子来自SAS 9.3的宏语言参考(p9):

%macro names(name= ,number= );
  %do n=1 %to &number;
    &name&n
  %end;
%mend names;

[... ]

data %names(name=dsn,number=5);

Submitting this statement produces the following complete DATA statement:

data dsn1 dsn2 dsn3 dsn4 dsn5;

据我所知,宏只是在代码中插入文本,所以我希望它会产生以下语句:data dsn1dsn2dsn3dsn4dsn5;

发生了什么事,我怎样才能用同一个调用生成上述语句?

要理解这一点,运行下面的代码

%macro names_whitespace(name= ,number= );
  %do n=1 %to &number; &name&n %end;
%mend names;

%put %names_whitespace(name=dsn,number=5);

%macro names_nospace(name= ,number= );
  %do n=1 %to &number;&name&n%end;
%mend names;

%put %names_nospace(name=dsn,number=5);

实际上,在您的宏 %names 中,您包含一个 新行 和一些 制表符 blanks 为您插入的每个名称。这些被称为白色 space 字符执行宏时,SAS 将后续的白色 space 字符替换为一个空白。