在SAS宏中使用的%符号的重要性是什么

时间:2015-08-31 19:58:47

标签: sas sas-macro

请考虑此示例SAS宏代码:

%MACRO reports;
   %IF &SYSDAY = Monday %THEN %DO;
   %END;
%MEND reports;

宏中的每个单词都需要以%为前缀吗? %符号到底意味着什么?

2 个答案:

答案 0 :(得分:6)

%macro trigger,还有&。它将下一个符号标识为宏语言元素的一部分。这可能是宏调用(%reports();),宏语句(%if),宏注释(%*)或其他宏语言元素。

了解SAS宏语言的工作方式对于理解这里的差异非常重要。例如,%IF指示SAS宏处理器执行某些操作。 IF是常规SAS代码,将被放入SAS数据步骤(或其他任何内容)。花一些时间来理解宏语言正在做什么 - 它的全部意义 - 完全理解它。

而且,与SAS中的许多内容一样,Ian Whitlock can explain it better than I can.

答案 1 :(得分:2)

%符号表示它是宏逻辑,没有datastep逻辑。

宏编辑在编译之前执行,就像C ++中的预编译逻辑一样。实例

%MACRO  reports ;
data lastWorkingDayData;
    set allData;
    %IF   &SYSDAY = Monday 
    %THEN %DO ;  
        if transactionDate ge "&SYSDATE."d -3 then output;
    %END ;
    %ELSE %DO ;  
        if transactionDate ge "&SYSDATE."d -1 then output;
    %END ;
RUN  ;
/* your printing logic comes here */
%MEND   reports ;
%reports;

如果你今天运行它会被转换,甚至在编译成

之前
data lastWorkingDayData;
    set allData;
        if transactionDate ge "&SYSDATE."d -3 then output;
RUN  ;
/* your printing logic comes here */

甚至在编译之前。要更好地理解它,请使用option mprint;启动代码并检查日志