检索宏定义代码

Retrieve macro definition code

假设我定义了一个宏函数,由于某些原因(例如错误),我删除了代码。不过我还有宏。

如何找回我用来定义它的代码?

要定义宏,我刚刚执行了:

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

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

 %copy MACRO_NAME / source;

SAS 官方答案,请参阅下面的原始 link:

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

SAS® 9.1 开始,%MACRO 语句有一个新的 SOURCE 选项。当与现有的 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

如果您没有 SOURCE 选项并且您的宏相对基础,您可以尝试使用 MPRINT 和 SYMBOLGEN 来获取带有代码的日志,但是如果您有条件逻辑,这将很难以确保重新创建代码。

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