SQL系列前兩篇[SAS] 3分鐘學會基本PROC SQL、[SAS] 3分鐘學會基本PROC SQL-2,這篇將介紹資料垂直合併、如何製作global macro variale。
沿用上一篇資料集:
資料集垂直合併:union
垂直合併資料在SAS當中第一時間想到data step裡面的set,但set function並不會對最終的資料集做去重複,而proc sql union能做到。
proc sql noprint;
/*union*/
create table info_health_u as select a.ID from info as a union
select b.ID from health as b ;
quit;
/* set function*/
data info_health_set;
set info health;
run;
舉例來說,info和health 分別有6筆和5筆資料。
- 若使用set function可以看到資料應該為11筆(6+5)。
- 若使用union function可以看到資料應該為7筆,因為取ID變數的唯一值共有7個。
製作global macro variable
在SAS程式語言當中,Macro variable 共分為兩種,一種是local macro variable,此類的變數僅能在特定區域使用,超過特定區域的範圍SAS便無法判別。另一種是global macro variable,這類型的變數在不同程式檔案間也可相互辨別,同樣的也會相互影響,因此使用上也需較為小心。
計算資料集總共有多少ID並且做成global macro variable可以參考以下程式碼:
/* crteate global macro variable*/
proc sql noprint;
select count(ID) into : BigN from info_health_u;
quit;
/*put the number*/
%put &bigN;
注意:proc sql 製作global ariable時,不可包含在%macro當中,否則SAS在macro外認不得這個變數,可以參考以下code和執行log:
%macro N();
proc sql noprint;
select count(ID) into : BigN2 from info_health_u;
quit;
%mend;
%put &bigN2;