SAS宏中的%修补语句

时间:2015-05-13 08:03:14

标签: macros sas

%macro A1(input);
[balala]
%mend A1;


%macro A1(input);
[balala]
%mend;

我刚刚意识到这两种方法都可以用来定义一个宏。这两者有什么区别吗?

2 个答案:

答案 0 :(得分:2)

不,绝对没有区别。所有这些在技术上都是一样的。

%mend;
%mend <macroname>;
%mend <something else>;

将宏名称放在那里的可能性只是为了清晰起见。

当你有很长的宏或者你在其他宏中定义宏时,这可能很有用(在我看来,这几乎总是不好的做法)。

例如,这些是完全相同的,但当然第一个是非常令人困惑的,但SAS正确警告你可能需要修复的东西:

1)

%macro OuterMacro;
    %macro submacro;
        %put 1;
    %mend OuterMacro;
%mend submacro;

2)

%macro OuterMacro;
    %macro submacro;
        %put 1;
    %mend submacro;
%mend OuterMacro;

http://support.sas.com/documentation/cdl/en/mcrolref/68140/HTML/default/viewer.htm#n01mgvwt7f9smen159ad334ts4ha.htm

答案 1 :(得分:1)

实际上,没有区别,你可以使用这两者中的任何一个。但作为一个好的编程实践,你应该使用第一个,因为它有助于识别宏的结束位置。

如果您使用的是第一个,请记住在用macromend后添加相同名称,否则SAS将发出Warning

http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#a000206958.htm