在日常的SAS編程中,經常會使用一些宏函數來達到特定的功能。這篇文章來介紹一下,我工作中常用的一些宏函數。
1、%sysfunc
宏函數%sysfunc是在宏語句中執(zhí)行SAS或用戶自己定義的函數,語法如下:
%SYSFUNC(function(argument(s))<, format>)
我常用的就是用%sysfunc執(zhí)行函數Tranwrd,從而達到對宏變量值的一些微小的修改。在項目編程中,一些基礎的信息會提前配置好保存到宏變量中,例如Output的輸出名稱。我遇到過幾次輸出名稱超過32個字符以及名稱中有連字符(-)的情況。這樣的話,我進行輸出同名數據集時SAS就會報錯。處理方法很簡單,縮寫單詞或者刪減單詞,用下劃線(_)替代連字符(-)。
這里有個注意點,項目中提前設置好的宏變量的值我們不應該改動,應該直接新建一個宏變量來保存修改好的值。否則就是,Hard Coding了。
下面我給出代碼示例:
%let name = aaa-bbb-cccc;
%let name_ = %sysfunc(tranwrd(&name, - , _));
%put &name.;
%put &name_.;
運行的結果如下:

Output 1
2、%str 和%nrstr
這兩個宏函數作用是,在宏編譯時,以常量文本掩蓋特殊字符和助記符。語法如下:
%STR(character-string)
%NRSTR(character-string)
這兩個函數的作用主要分為以下3類:
- 它們會掩蓋了以下特殊字符和助記符:
/ + ? * < > = ? ^ ~ ; , # blank
AND OR NOT EQ NE LE LT GE GT IN
- 它們還會掩蓋成對出現(xiàn)的引號、括號,或者前面有百分號(%)標記的不成對引號、括號:
' " ( )
- 除了上面所講,%NRSTR還掩蓋了跟宏息息相關的百分號和取地址符合:
& %
用具體代碼演示常用放af,比較容易理解:
- 在給宏變量賦值時,保留值前面的空格:
%let var1 = hahaha;
%let var2 = %str( hahaha);
%let var3 = %nrstr( hahaha);
%put I will&var1.;
%put I will&var2.;
%put I will&var3.;
從輸出可以看出,兩個函數保留了輸入前的空格:

Output 2
- 掩蓋引號的作用:
%let var1 = I'm happy;
%let var2 = %str(I'm happy);
%let var3 = %str(I%'m happy);
未完待續(xù),后面有空繼續(xù)補充。