2015-11-13 47 views
0

如果我写有内容的test.sas:如何我使用%包括调用SAS宏

%macro test; 
%put test macro; 

%mend; 
%test; 

然后就是在SAS会话中执行此:

%include test.sas 

威尔它只是调用宏'测试'?或者它是否只包含宏定义,但跳过执行?

回答

0

%include就像在外部文件上打F3一样。它会尝试编译和执行文本文件中的所有内容。所以,如果你打开mcompilenote=all和你的程序是:

%macro test; 
%put test macro; 

%mend; 
%test; 

日志将读取:

8 %macro test; 
9 %put test macro; 
10 
11 %mend; 
NOTE: The macro TEST completed compilation without errors. 
     6 instructions 80 bytes. 
12 %test; 
test macro 

但是,如果你的程序是:

%macro test; 
%put test macro; 

%mend; 

日志将改为:

8 %macro test; 
9 %put test macro; 
10 
11 %mend; 
NOTE: The macro TEST completed compilation without errors. 
     6 instructions 80 bytes. 
0

它将执行文件中的语句,就像它们被包含在原始程序中的行一样。所以它将首先定义宏,然后当最后一行运行时它将执行宏。

0

是的,它会工作正如你最初所建议的那样 - 它会编译并运行宏。

我会注意到,良好的编程风格将是在您的实际程序中有宏调用(如果这就是你所做的)。这就像一个C++头文件:宏包含'要做什么',然后你实际调用它在你的实时代码中 - 不仅是为了好的样式,而且是为了能够重新运行它,而无需重新编译它,如果你需要(修复某事,说)。