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

What is the importance of the % symbol as used inside a SAS macro

请考虑这个示例 SAS 宏代码:

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

宏中的每个单词是否都需要加上前缀 %% 符号到底是什么意思?

%符号表示是宏逻辑,没有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; 开始您的代码并检查您的日志

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

了解 SAS 宏语言的工作原理对于理解此处的差异非常重要。 %IF 例如指示 SAS 宏处理器做某事。 IF 是将放入 SAS 数据步骤(或其他)的常规 SAS 代码。花一些时间了解宏语言在做什么 - 它的全部意义是什么 - 以完全理解它。

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