[SAS] Macro Language 基礎內容

by wenwu
0 comment

好久沒有寫SAS的文章了,最近有機會去上SAS Macro Language 1: Essentials 的課程,想整理上課的一些筆記,也和大家分享一些SAS Macro 的內容。我本來就有在寫SAS Macro,但是從來沒有上過完整的課程。這個課程很精實,在兩天內把Macro 可能用到的基礎課程做了一個整理。我也藉著課程了解macro 的運行邏輯。

What’s Macro is SAS

首先來和大家分享什麼是SAS Macro,在寫R or Python 的時候,我們可以指定變數,比如,讓X指定是10

X=10

但是在SAS,不能直接寫 X=10 ,需要一些指定的符號來啟用macro。另外,在SAS裡面如果要寫 loop 迴圈的話,也需要Macro definition來寫,這部分可能無法在今天一起解釋。我們今天先介紹基本的macro variable

SAS Macro 怎麼使用

  1. 我們需要用 % & 符號來啟動 Macro,這兩個符號也是 Macro trigger。當一段SAS BASE 程式裡面有 % & 的符號時,會先把 Macro variable 解開
  2. Macro 是使用文字,所以有很多時候不需要引號
  3. 在跑程式的時候,會先解 macro ,之後再跑 SAS base

基本的Macro 寫法

Put

  1. 需要 % 來啟動 put
  2. Put 是很簡單的macro 函數,可以直接寫到log上面
  3. 並且 %put 不需要引號
  4. 如果寫 NOTE、WARNING、ERROR 都會換顏色

可以使用上面的方法,在寫判斷的時候跑出log,可以使用顏色來判斷

%put hello;
%put NOTE: hello, change color;
%put WARNING: BLUE color for warning;
%put ERROR: red color;

使用 put 來展示

  1. %put &=name; %put &name;找name的內容是什麼
  2. %put <text>&name<text>; 印出一段文字
    %let name= Max;
    %put &=name;
    %put &name;
    %put My name is &name;

    使用 %let 來宣告 macro variable

    1. %let name=value;
      • value: macro 值
      • name: macro variable
      • 大小寫有差
      • 會自動刪除空白
      • 沒有數字,以text為主
      • 最多可以存 64 K
        %let type=Truck;
        %let hp=250;
        %let type= Sports ;
        %let origin=" Europe ";
        %let value=;
        %let sum=3+4;
        %let varlist=Make Model Type;
        
        %put &=type;
        %put &=hp;
        %put &=type;
        %put &=origin;
        %put &=value;
        %put &=sum;
        %put &=varlist;
        

        使用 & 來呼叫

        1. 能夠將macro variable 呼叫回來
        2. 如果放在文字裡面需要雙引號
          %put &=name;
          
          %let type=BMW;
          proc freq data=sashelp.cars;
          	table Model;
          	where Make="&type";
          run;
          

          使用 %symdel 刪除macro variable

          1. %symdel list of variable names;
          2. 使用%let 寫的macro variable 都是 global 的,要自己主動刪除,才會刪除 (之後會講到 global 和 local 的差別)
            %symdel name hp type origin;
            

            其他的put 用法

            1. 可以使用 %put _automatic_; 找到 SAS 裡面的 Automatic macro variable
              • 可以利用 Automatic macro variable 來使用
            2. 可以使用 %put _user_; 找到我們宣告的 macro variable

              使用 options 來偵錯 SAS Macro Debugging

              1. Options symbolgen;
                • 巨集變數(&var)被展開成什麼值
                • 巨集變數是不是抓錯、變數名稱是否拼錯
              2. Options mlogic;
                • Macro 程式的邏輯流程:IF/ELSE、DO 循環、條件判斷
                • Macro 的控制流程是否如預期
              3. Options mprint;
                • Macro 展開後,實際送到 SAS compiler 的 DATA step / PROC 程式碼
                • 確認巨集產生的程式碼是否正確
              4. option mcompilenote = ALL|NONE;
                • 檢查macro 錯誤

              還沒講到 macro definition,偵錯 的部分就大家可以先試試看怎麼使用

              其他要注意的: 在使用 macro 的時候,macro variable 後面的小數點會被吃掉

              1. 使用的時機是文字必須黏在macro variable之後的時候
              2. 如果需要小數點,可以使用兩個小數點,一個會被吃掉
              • %let type=Truck
              • “&type.s" ⇒ Trucks

                今天就介紹最基本的 macro variable,之後再寫如何用 SQL/ data set 建立 macro variable

                Related Articles

                發表迴響