由宏中的do循环插入的空格

时间:2018-01-12 12:22:24

标签: sas sas-macro

我是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);
     

提交此语句将生成以下完整数据   语句:

data dsn1 dsn2 dsn3 dsn4 dsn5;

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

发生了什么,我怎么能用相同的电话产生上述声明?

1 个答案:

答案 0 :(得分:3)

要理解这一点,请运行以下代码

%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中,您为每个插入的名称添加新行和一些标签空白 。这些称为空格字符执行宏时,SAS用一个空格替换成功的空格字符。