代码之家  ›  专栏  ›  技术社区  ›  moodymudskipper

检索宏定义代码

  •  2
  • moodymudskipper  · 技术社区  · 6 年前

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

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

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

    %macro(param1,param2);
    my code
    %mend;
    
    2 回复  |  直到 6 年前
        1
  •  3
  •   moodymudskipper    6 年前

    如果使用 source 选项,并且在库中,可以使用以下内容检索该选项:

     %copy MACRO_NAME / source;
    

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

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

    从开始 SAS® 9.1 ,有一个新的 SOURCE 的选项 %MACRO 陈述与现有 STORE 选项 来源: 选项组合并存储已编译宏的源。

    编译后的宏代码成为 SAS 永久目录 SAS公司 数据库。编译后的宏和源代码存储在同一个 SASMACR 目录这个 来源: 选项要求 存储 选项和 SAS公司 选项 MSTORED 设置。您可以使用 SAS公司 选项 SASMSTORE= 确定永久 SAS公司 数据库。仅当 SAS公司 选项 M存储 已生效。

    注意:保存的源代码 来源: 选项以开头 %宏 关键字,并以分号结尾 %MEND 陈述现在,您可以使用 来源: 选项,您还需要一种检索此信息的方法。答案是新的 %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

        2
  •  1
  •   Reeza    6 年前

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

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