宏中 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 字符替换为一个空白。
我是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 字符替换为一个空白。