【问题标题】:Meaning of dummy macro in SASSAS中虚拟宏的含义
【发布时间】:2014-09-24 10:53:22
【问题描述】:

我在一开始就继承了一些宏,下面这行:

%macro dummy; %mend dummy;

这个宏在任何地方都没有特殊的调用,我不明白它的含义......

【问题讨论】:

    标签: macros sas


    【解决方案1】:

    宏没有“意义”。它只是一个不包含任何代码的宏的声明。因此,当您运行它时,什么也不会发生。

    但是,它可能会尝试清除以前定义的名为 dummy 的宏,以避免意外执行。

    清除(或在这种情况下删除)宏的更正确方法是使用(适用于 SAS 9.3 及更高版本):

    %SYSMACDELETE dummy;
    

    这样,如果你要执行一个名为dummy 的宏,你会得到一个这样的宏不存在的错误。如果您只是像示例中那样清空宏的内容,则不会出现此错误。

    【讨论】:

    • 如果@griboedov 正在使用SAS 9.3 并且%SYSMACDELETE 已经在代码中的某处使用,那么虚拟宏可能作为一种规避存在,如SAS Problem Note 52641 中所述
    • 同意@soren 的分析,但建议从任何生产代码中删除这个空宏定义。提到的所有可能的理由都是真正的黑客。应该没有必要。在生产代码中甚至不需要 %SYSMACDELETE dummy。
    【解决方案2】:

    如果代码打算在企业指南中使用并且虚拟宏定义在另一个(真实)宏定义中,那么它可能是一个旨在强制语法突出显示的黑客攻击。

    例如:

    %macro real;
        /* Some sas code but without syntax highlighting */
    %mend real;
    

    但是:

    %macro real;
        /* Some sas code but without sintax highlighting */ 
        %macro dummy; %mend dummy;
        /* Some sas code with syntax highlighting */
    %mend real;
    

    似乎是%mend 重新启用了突出显示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 2016-03-07
      • 1970-01-01
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      相关资源
      最近更新 更多