SAS編程:一些宏函數的介紹

在日常的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類:

  1. 它們會掩蓋了以下特殊字符和助記符:

/ + ? * < > = ? ^ ~ ; , # blank
AND OR NOT EQ NE LE LT GE GT IN

  1. 它們還會掩蓋成對出現(xiàn)的引號、括號,或者前面有百分號(%)標記的不成對引號、括號:

' " ( )

  1. 除了上面所講,%NRSTR還掩蓋了跟宏息息相關的百分號和取地址符合:

& %

用具體代碼演示常用放af,比較容易理解:

  1. 在給宏變量賦值時,保留值前面的空格:
%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
  1. 掩蓋引號的作用:
%let var1 =  I'm happy;
%let var2 = %str(I'm happy);
%let var3 = %str(I%'m happy);

未完待續(xù),后面有空繼續(xù)補充。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容