在 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.
请考虑这个示例 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.