
- SAS 教程
- SAS - 首頁
- SAS - 概述
- SAS - 環境
- SAS - 使用者介面
- SAS - 程式結構
- SAS - 基本語法
- SAS - 資料集
- SAS - 變數
- SAS - 字串
- SAS - 陣列
- SAS - 數值格式
- SAS - 運算子
- SAS - 迴圈
- SAS - 決策
- SAS - 函式
- SAS - 輸入方法
- SAS - 宏
- SAS - 日期和時間
- SAS 資料集操作
- SAS - 讀取原始資料
- SAS - 寫入資料集
- SAS - 合併資料集
- SAS - 合併資料集
- SAS - 子集資料集
- SAS - 排序資料集
- SAS - 格式化資料集
- SAS - SQL
- SAS - 輸出交付系統
- SAS - 模擬
- SAS 基本統計過程
- SAS - 算術平均數
- SAS - 標準差
- SAS - 頻率分佈
- SAS - 交叉表
- SAS - t檢驗
- SAS - 相關分析
- SAS - 線性迴歸
- SAS - Bland-Altman 分析
- SAS - 卡方檢驗
- SAS - Fisher 精確檢驗
- SAS - 重複測量分析
- SAS - 單因素方差分析
- SAS - 假設檢驗
- SAS 有用資源
- SAS - 快速指南
- SAS - 有用資源
- SAS - 問答
- SAS - 討論
SAS - 宏
SAS 具有一個強大的程式設計功能,稱為宏,它允許我們避免重複的程式碼段,並在需要時反覆使用它們。它還有助於在程式碼中建立動態變數,這些變數可以在同一程式碼的不同執行例項中取不同的值。宏也可以為程式碼塊宣告,這些程式碼塊將以類似於宏變數的方式重複使用多次。我們將在下面的示例中看到這兩者。
宏變數
這些變數儲存一個值,該值將被 SAS 程式反覆使用。它們在 SAS 程式的開頭宣告,並在程式主體中稍後呼叫。它們的範圍可以是全域性的或區域性的。
全域性宏變數
它們被稱為全域性宏變數,因為 SAS 環境中任何可用的 SAS 程式都可以訪問它們。通常,它們是系統分配的變數,多個程式可以訪問它們。一個常見的示例是系統日期。
示例
下面是一個名為 SYSDATE 的 SAS 變數的示例,它表示系統日期。考慮一個場景,每天生成報表時,在 SAS 報表的標題中列印系統日期。標題將顯示當前日期和星期幾,而無需我們為它們編碼任何值。我們使用 SASHELP 庫中可用的名為 CARS 的內建 SAS 資料集。
proc print data = sashelp.cars; where make = 'Audi' and type = 'Sports' ; TITLE "Sales as of &SYSDAY &SYSDATE"; run;
執行上述程式碼後,我們將獲得以下輸出。

區域性宏變數
這些變數可以被宣告為程式一部分的 SAS 程式訪問。它們通常用於向相同的 SAS 語句提供不同的變數,以便它們可以處理資料集的不同觀測值。
語法
區域性變數使用以下語法宣告。
% LET (Macro Variable Name) = Value;
此處,Value 欄位可以根據程式需要採用任何數值、文字或日期值。宏變數名稱是任何有效的 SAS 變數。
示例
SAS 語句使用在變數名稱開頭附加的&字元來使用這些變數。下面的程式獲取製造商為“Audi”且型別為“Sports”的所有觀測值。如果我們想要不同製造商的結果,我們需要更改變數make_name的值,而無需更改程式的任何其他部分。在程式中,此變數可以在任何 SAS 語句中反覆引用。
%LET make_name = 'Audi'; %LET type_name = 'Sports'; proc print data = sashelp.cars; where make = &make_name and type = &type_name ; TITLE "Sales as of &SYSDAY &SYSDATE"; run;
執行上述程式碼後,我們將獲得與上一個程式相同的輸出。但是,讓我們將型別名稱更改為'Wagon'並執行相同的程式。我們將得到以下結果。

宏程式
宏是一組 SAS 語句,由名稱引用,並在程式中的任何位置使用該名稱來使用它。它以 %MACRO 語句開頭,以 %MEND 語句結束。
語法
區域性變數使用以下語法宣告。
# Creating a Macro program. %MACRO <macro name>(Param1, Param2,….Paramn); Macro Statements; %MEND; # Calling a Macro program. %MacroName (Value1, Value2,…..Valuen);
示例
下面的程式在名為'show_result'的宏下聲明瞭一組 SAT 語句;此宏由其他 SAS 語句呼叫。
%MACRO show_result(make_ , type_); proc print data = sashelp.cars; where make = "&make_" and type = "&type_" ; TITLE "Sales as of &SYSDAY &SYSDATE"; run; %MEND; %show_result(BMW,SUV);
執行上述程式碼後,我們將獲得以下輸出。

常用宏
SAS 有許多宏語句,它們是 SAS 程式語言的內建語句。它們由其他 SAS 程式使用,無需顯式宣告。常見的示例包括 - 在滿足某些條件時終止程式或在程式日誌中捕獲變數的執行時值。以下是一些示例。
宏 %PUT
此宏語句將文字或宏變數資訊寫入 SAS 日誌。在下面的示例中,變數“today”的值被寫入程式日誌。
data _null_; CALL SYMPUT ('today', TRIM(PUT("&sysdate"d,worddate22.))); run; %put &today;
執行上述程式碼後,我們將獲得以下輸出。

宏 %RETURN
當某些條件評估為真時,執行此宏會導致當前正在執行的宏正常終止。在下面的示例中,當變數"val"的值變為 10 時,宏終止,否則它繼續執行。
%macro check_condition(val); %if &val = 10 %then %return; data p; x = 34.2; run; %mend check_condition; %check_condition(11) ;
執行上述程式碼後,我們將獲得以下輸出。

宏 %END
此宏定義包含一個%DO %WHILE迴圈,該迴圈根據需要以 %END 語句結束。在下面的示例中,名為 test 的宏獲取使用者輸入並使用此輸入值執行 DO 迴圈。DO 迴圈的結束透過 %end 語句實現,而宏的結束透過 %mend 語句實現。
%macro test(finish); %let i = 1; %do %while (&i <&finish); %put the value of i is &i; %let i=%eval(&i+1); %end; %mend test; %test(5)
執行上述程式碼後,我們將獲得以下輸出。
