[SAS] 3分鐘學會基本PROC SQL-3

YC Huang
Mar 19, 2024

--

SQL系列前兩篇[SAS] 3分鐘學會基本PROC SQL[SAS] 3分鐘學會基本PROC SQL-2,這篇將介紹資料垂直合併、如何製作global macro variale。

沿用上一篇資料集:

左:info資料集; 右:health資料集

資料集垂直合併: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 select into 程式碼執行log

注意: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;
proc sql 包含在macro內程式碼執行log

--

--

YC Huang

嗨嗨我是一個喜歡資料視覺化的小小工程師,目前專注於SAS和臨床統計,希望文章能更多關於什麼主題呢?歡迎留言給我