请考虑此示例SAS宏代码:
%MACRO reports;
%IF &SYSDAY = Monday %THEN %DO;
%END;
%MEND reports;
宏中的每个单词都需要以%
为前缀吗? %
符号到底意味着什么?
答案 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;
启动代码并检查日志