我是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;
发生了什么,我怎么能用相同的电话产生上述声明?
答案 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用一个空格替换成功的空格字符。