SAS學習筆記7

1、簡介 java

SAS經過宏過程能夠把 數據步或者過程步的功能進行封裝,在宏過程當中能夠定義參數,經過調用宏過程把實參傳遞給形參進行引用。宏過程就至關於關係數據庫中的存儲過程,調用時只須要知道宏過程名就能夠,具體的內部如何實現不用瞭解,實現了程序的封裝。 數據庫

2、宏過程執行機制 編程

對於宏語言,SAS有本身的內部處理機制,宏程序編寫好後,首先進行宏編譯,生成宏程序,調用時經過宏分析器解析,而後在編譯過程當中若是宏程序有錯誤,會在日誌中顯示。 編輯器

宏執行的流程: 函數

SAS程序先提交進入緩衝區,而後經過字符掃描組件識別到宏程序,調用宏TOKEN解析器,TOKEN解析器的四個普通組件對宏程序進行解析,解析完成交給編譯器編譯程序,如有錯誤,程序編譯階段會在日誌中顯示錯誤信息,沒有錯誤編譯經過,用戶經過調用宏語法,調用執行宏。 spa

TOKEN解析器的四個組件及其功能以下: 操作系統

(1)Literal組件 調試

Literal組件解析用單引號或雙引號括起來的字符串,如'yang',"chang"。 日誌

(2)Number組件 code

Number組件解析數值類型、日期類型、時間類型和十六進制數值,如2三、'20110323'd。

(3)Name組件

Name組件解析以字母或下劃線開始的字符串,如c_b、_d。

(4)Special組件

Special組件解析一些特殊字符串或字符串組,如@、#、*、/、+、-、**、;、$、()、.、&、%、=等。

下邊咱們介紹一個簡單的程序講解宏程序執行機制,以下:

%let x=5;
%MACRO add;
%let y=%eval(&x+1);
%put y=&y;
RUN;
%MEND add;
%add;



以上程序提交程序後,SAS系統先把程序放入輸入緩衝區存儲,經過字符掃描組件,解析識別須要調用SAS宏解析器,調用TOKEN解析器,經過Number組件解析數字,Literal組件解析字符,並調用宏解析函數%eval(),實現整數運算。TOKEN解析器解析完成,輸出程序傳送到編輯器,進行編譯,如有語法錯誤,程序退出,並在日誌中顯示錯誤信息,調試正確經過後,經過宏調用語句,調用執行宏,實現加法運算。

宏功能總結以下:

1)實現程序的重複利用,減小了文本的輸入量。

2)實現了程序功能的封裝。

3)實現變量的傳遞。

4)獲取SAS系統信息與其餘系統的交互。

5)不一樣數據步與過程步之間傳遞數據與參數。

3、宏的定義和使用

宏變量和數據步中的變量是不一樣的,宏變量能夠在SAS程序的任何地方引用和定義,屬於弱類型語句。宏變量有兩種,一種是用戶定義的宏變量,一種是SAS系統內部具備的自動宏變量。對於用戶定義的宏變量是指用戶根據需求定義的變量,對於用戶定義的宏變量用戶能夠給變量賦值,也能夠爲空,能夠指定範圍,經過%GLOBAL聲明能夠定義全局宏變量,默認是全局宏變量。

1)用戶定義的宏變量

宏變量的定義語法是:%let 宏變量名 <= 賦實際值>;

對於宏變量的引用,須要「&」符號,具體語法如:&宏名

注意:間接引用宏變量要用兩個&&符號,如「&&v_var1.&v_var2」,這裏的點「.」屬於間接引用分隔,告訴SAS系統是兩個宏變量,「&&v_var1」中的第一個「&」符號是告訴SAS系統啓動宏TOKEN解析器,而後讀到「&v_var1」引用此宏變量。

一個小例子

%let x=5;
%let y=&x;

程序中定義的宏變量x,在定義的宏變量y中的引用。
經過符號「&」把x宏變量的值賦給y宏變量。



2)SAS系統內部自動宏變量

所謂的自動宏變量是SAS系統內部已經定義好的變量,不須要用戶再定義,用到時直接調用。

經常使用的自動宏變量以下:

系統內部自動宏變量 說明
_AUTOMATIC 查看全部系統自動宏變量
SYSDATE 查看當前日期
SYSVER 查看SAS當前版本
SYSLAST 查看SAS當前最新生成的數據集信息
SYSTIME 查看當前系統時間
SYSSCP 查看用戶所使用的操做系統
SYSDAY 查看當前星期幾
_ALL_ 查看用戶建立的宏變量
_USER_ 查看用戶定義的宏變量
_GLOBAL_ 查看用戶定義的全局宏變量
_LOCAL_ 查看用戶定義的局部宏變量

注意:(1)對於自動宏變量_AUTOMATIC_引用是比較特殊,不須要符號&,直接引用,方式爲%PUT _AUTOMATIC_。

(2)對於文本串中的引用宏變量,必須用雙引號括起來,而不能用單引號。如:

%let city=beijing;
DATA c;
x="I am from &city";   /*引用宏變量city*/
RUN;



(3)宏變量中能夠直接引用宏函數傳遞的值。語法以下:

%let v_var=%宏函數();

3)宏過程

宏過程內部能夠調用數據步或過程步的機制,能夠包含循環和分支語句。對於宏過程而言,用戶所調用的宏過程都是已經編譯好的,宏過程當中包含一個寫程序的聲明,接收外部傳遞的參數。

宏過程的語法格式: %MACRO 宏名 <(宏參數)> </參數選項>;

宏功能語句:%MEND <宏名>

例子:編寫一個宏過程,實現加法運算。

%MACRO add_sum(v_x,v_y);   /*宏過程開始,定義宏名*/
%let v_sum=%eval(&v_x+&v_y); /*調用宏函數%eval(),實現整數運算*/
%put &v_sum;  /*宏變量引用要用&符號,輸出到日誌窗口*/
%MEND add_sum;   /*宏過程結束標誌,結束宏名*/
%add_sum(2,6);  /*調用宏過程*/



程序解讀:

(1)宏過程add_sum包含兩個形參,SAS系統對編輯好的宏過程提交後先輸入帶緩衝區,而後經過字符掃描組件判斷出是宏過程,調入TOKEN解析器,經過TOKEN解析器四個組件解析宏語句,解析完成,傳送到編譯器編譯程序,檢查沒有語法錯誤後,編譯經過。

(2)%add_sum(2,6)調用宏過程,並把實參2傳遞給v_x變量,6傳遞給v_y變量,實現求和運算。

注意:SAS中引用宏變量要加「&」符號。宏過程當中能夠經過「%put」語句把宏變量值輸出到日誌(LOG)窗口,經過這個能夠調試宏過程。

4、宏經常使用語句

1)%PUT

%PUT宏語句能夠把信息輸出到日誌窗口,幫助調試程序。

語法格式:%PUT <選項語句>;

%PUT:輸出宏語句若是後邊不帶選項語句,則輸出一個空行到SAS日誌窗口。

所以%PUT宏語句在調試程序BUG時常常用,能夠把信息顯示到日誌窗口,便於查找程序錯誤。

5、宏過程調用

宏過程調用語法格式: %宏過程名 <(實參)>;

%:百分號是調用宏過程的語法關鍵字,必選項。

下邊是一個例子:

%MACRO xy; /*無參數宏過程*/
PROC print data=sashelp.buy;
RUN;
%MEND xy;
%xy;  /*無參數宏過程調用*/


解讀:宏過程封裝了打印過程,打印邏輯庫sashelp中的數據集buy,
無參數。「%xy」直接寫宏過程名,此處不須要參數項。



6、經常使用的宏編程語句

宏語句 說明
%ABORT 結束當前宏運行,屬於宏定義中的語句
%COPY 從SAS宏邏輯庫中複製指定的對象
%GLOBAL 建立全局宏變量語句
%LOCAL 建立局部宏變量語句
%LET 定義宏變量語句
%PUT 輸出文本或宏變量信息到日誌窗口展現
%IF %THEN %ELSE 條件選擇宏語句
%DO %UNTIL 重複執行語句塊中的宏語句,知道UNTIL後條件爲真
%DO %WHILE WHILE語句後條件爲真,重複執行語句塊中的宏語句
%DO %TO 循環宏語句
%DO %END 宏子功能塊語句
%DO %TO<%BY> 循環迭代語句

7、宏函數

1)宏計算函數

宏計算函數實現加、減、乘、除四則運算的功能。

宏計算函數 功能
%EVAL 實現整數運算
%SYSEVALF 實現浮點數據運算

例子:

1.%EVAL()宏函數
函數格式: %EVAL(整數的數學運算)

%MACRO cum(x,y);  /*定義宏過程*/
%let z=%eval(&x*&y);    /*%eval函數進行整數運算*/
%put &z;
%MEND cum;  /*宏過程結束標誌*/
%cum(88,11); /*調用宏過程*/

程序解讀:
%EVAL宏函數實現z=x*y 兩個整數的乘法運算,日誌窗口顯示z=968

2.%SYSEVALF()宏函數
函數格式:%SYSEVALF(浮點數,<數值類型>)

%MACRO cumf(x,y);   /*定義宏過程*/
%let f=%sysevalf(&x+&y);   /*%sysevalf函數進行浮點數運算*/
%put &f;
%MEND cumf;   /*宏過程結束標誌*/
%cumf(98.2,1.1);  /*調用宏過程*/

程序解讀:
%SYSEVALF函數計算x+y的浮點數運算,經過日誌窗口顯示信息能夠看到f=x+y=99.3



注意:布爾類型的運算符也能夠經過%SYSEVALF()函數進行運算。

2)宏字符處理函數

宏字符處理函數只對字符類型的值進行處理。

宏字符處理函數 功能
%TRIM 過濾文本尾部的空格
%QTRIM 過濾包含特殊字符文本的尾部空格
%LENGTH 計算字符串變量長度
%INDEX 查找一個字符串中字符出現的位置
%SUBSTR 從指定的字符串中提取子串
%UPCASE 將指定的字符串轉化爲大寫
%QSCAN 根據特殊分隔符查找,並提取子串
%SCAN 根據指定分隔符查找,並提取子串

3)其餘經常使用重要宏函數

其餘經常使用重要宏函數,不能歸於上面兩類的宏函數,也是常常用到的。

宏函數 功能
%INCLUDE 指明包含的外部文件路徑
%SYSFUNC 宏變量中調用SAS內部函數或者用戶自定義函數
%STR 引用包除特殊符號的固定文本,特殊符號如# % &
%NRSTR 引用包含特殊符號的固定文本
相關文章
相關標籤/搜索