检索宏定义代码

时间:2018-03-29 17:09:13

标签: sas sas-macro

假设我已经定义了宏功能,并且出于某种原因(例如错误),我删除了代码。我仍然有宏。

如何检索用于定义代码的代码?

要定义宏,我刚执行:

%macro(param1,param2);
my code
%mend;

2 个答案:

答案 0 :(得分:2)

如果您使用指定的source选项定义了宏,并且在库中可以使用以下选项检索它:

 %copy MACRO_NAME / source;

官方SAS答案,请参阅以下原始链接:

无法从存储的已编译宏中检索原始源代码。您必须始终将原始代码保存在另一个文件中,以便以后修改。

SAS® 9.1开始,SOURCE语句有一个新的%MACRO选项。与现有STORE选项一起使用时,SOURCE选项组合并存储已编译宏的源。

编译后的宏代码成为永久SAS数据库中SAS目录中的条目。已编译的宏和源代码一起存储在同一SASMACR目录中。 SOURCE选项要求设置STORE选项和SAS选项MSTORED。您可以使用SAS选项SASMSTORE=来标识永久SAS数据库。只有在SAS选项MSTORED生效时,您才能存储宏或调用存储的已编译宏。

注意:SOURCE选项保存的源代码以%MACRO关键字开头,以%MEND语句后面的分号结尾。既然您已经有了使用SOURCE选项存储源代码的方法,那么您还需要一种方法来检索此信息。答案是新的%COPY语句,它从SAS宏库中复制指定的项目。

例如:

libname test 'c:\';
options mstored sasmstore=test;  

%macro test(arg) / store source des="test of the source option";
  %put arg = &arg;
  data one;
    x=1;
    run;
%mend test;

%copy test / source;

来源: http://support.sas.com/kb/22/352.html

答案 1 :(得分:1)

如果你没有SOURCE选项并且你的宏是相对基本的,你可以尝试使用MPRINT和SYMBOLGEN来获取​​代码的日志,但如果你有条件逻辑,那么很难重新创建代码肯定。

options mprint symbolgen;
%my_macro(param1, param2);