類SAS函數的宏函數
該部分函數共5個,其無論是名字、語法、功能都與SAS函數類似,只是在函數名前多了一個“%”。這5個宏函數分別是:
-
%INDEX
-
%LENGTH
-
%SCAN
-
%SUBSTR
-
%UPCASE
需要注意的一點是%INDEX,%SCAN這兩個函數,其對應的SAS函數INDEX,SCAN;在INDEX查找指定的文本串,及SCAN中指定分隔符時,需要用引號將其內容引起來;而%INDEX,%SCAN則不需要引號。因為在宏語言中所有的東西都是文本,因此不需要用引號特別指定是文本
完成數值計算的宏函數
如果想要完成數值計算則需要使用%EVAL宏函數來完成。另外,如果計算中出現小數,則需要用%SYSEVALF
另外,%EVAL和%SYSEVALF都是可以進行乘法和除法運算,只不過%EVAL只能對整數進行;而%SYSEVALF可以對小數進行運算
有關宏變量狀態的宏函數
%SYMEXIST(macro-variable-name)宏函數用於判斷一個宏變量是否存在,其參數為宏變量名。若該宏變量存在,則返回1;否則,返回0
%SYMGLOBL(macro-variable-name)宏函數用於判斷一個宏變量是否是全局宏變量,即是否存在於Global Symbol Table中。如果是全局宏變量,則返回1;否則返回0
%SYMLOCAL(macro-variable-name)宏函數用於判斷一個宏變量是否是局部宏變量,即是否存在於Local Symbol Table中。如果是局部宏變量,則返回1;否則返回0
有關宏程序狀態的宏函數
%SYSMACEXEC(macro-name)宏函數用於獲取指定宏的運行狀態,若該宏在運行當中,則返回1;否則返回0
%SYSMACEXIST(macro-name)宏函數用於判斷一個宏程序是否存在於Work.SASMacr catalog中,如果存在返回1,否則返回0
%SYSMEXECDEPTH宏函數無參數,用於判斷宏的嵌套層數。若在宏外調用,則返回0;如果是在一層的宏中調用,則返回1;若在嵌套1層的宏中調用,則返回2;以此類推
%SYSMEXECNAME(n)宏函數通常與上面的%SYSMEXECDEPTH一起使用,用於返回指定嵌套層的宏名字。若n為0,則返回OPEN CODE;若大於0,則返回對應嵌套層的宏名字。若不存在該嵌套層,則會顯示警告信息
調用SAS函數的宏函數
%SYSFUNC(function(argument(s))<, format>))宏函數用於調用SAS函數或者使用FCMP過程步創建的自定義函數,還可以將結果按照指定格式輸出
其他宏函數
%SYSGET(environment-variable)宏函數用於獲取當前操作系統的環境變量的取值
%SYSPROD(product)函數用於判斷在當前的SAS環境中,指定的SAS產品是否有License。若有相應許可,則返回1;若無許,則返回0;若參數中的產品名有誤,則返回-1
Quoting Function
Quoting Function主要是用於屏蔽一些字符的特定功能,將其作為普通的字符來對待。例如:運算符、比較符、操作符等,還有兩個Macro Trigger:%,&
這部分共包含有12個函數,分別是:%STR、%NRSTR、%QUOTE、%NRQUOTE、%BQUOTE、%NRBQUOTE、%SUPERQ、%UNQUOTE、%QSAN、%QSUBSTR、%QSYSFUNC、%QUPCASE。
其中后4個函數有對應的普通宏函數,其主要功能是類似的