這篇記錄我摸索proc boxplot功能的SAS programming練習過程。
我參考過往做過的實驗架構,編撰了一份假資料。
這份資料有4個取樣時間(date),3個相對濕度處理條件(trt),以及4種樣品種類(var),對樣品測定了某個目標物質的含量(content),含量測定上做了兩重複(rep)。
資料使用excel的xlsx檔案,使用proc import輸入excel資料集。
out = 產生的dataset名稱
sheet = "工作表名稱";
並於輸入後proc print,產生報表,迅速看一下資料輸入的狀況。
proc import datafile = "D:\Work\case01_plant_forblogger.xlsx" out = case01_plant dbms = xlsx replace; sheet = "rawdata"; getnames=yes; run;
proc print data= case01_plant; run; |
接下來,我想看一下敘述性統計資料,這邊使用proc means。
在這邊發現分組方式有兩種,一種是使用by來分組,另一種是使用class。
可以看到 by分組會拆成多張表,class分組會把結果放在同一張表。
◻️ 使用By分組
proc means data= case01_plant maxdec=2 n mean std stderr; var content; by trt var; title 'using "by" for grouping'; run; |
◻️ 使用class分組
proc means data= case01_plant maxdec=2 n mean std stderr ; var content; class trt var; output out = means_case01_plant; title 'using "class" for grouping'; run; |
再來開始嘗試產出boxplot,針對trt分組,看看不同RH處理條件下的含量差異。
proc sort data = case01_plant out=sorted_by_trt_plant; by trt; run; Proc boxplot data=sorted_by_trt_plant ; Plot content*trt; title 'grouped by trt '; run;
|
針對var分組,看看不同樣品種類下的含量差異。
proc sort data = case01_plant out=sorted_by_var_plant; by var; run; Proc boxplot data=sorted_by_var_plant ; Plot content*var; title 'grouped by var '; run;
|
對trt和var分組,來看一下各組的數值差異。
參考SAS guide,plot的寫法為:
plot (analysis variables)*group variables (blocks variables) ;
有()的變數表示可以寫進多個變數,寫入多個變數需要以空白格隔開。
e.g. (height weight)*gender
plot 分析變數*分組變數 (區集變數) ;
#區集變數這個是我個人暫時的翻譯,考量試驗設計有區集(block)的譯名。
- 官網原文介紹 block-variables:
- block-variables: specify optional variables that group the data into blocks of consecutive groups. These blocks are labeled in a legend, and each block variable provides one level of labels in the legend.
proc sort data = case01_plant out=sorted_by_trt_var_plant; by trt var; run; Proc boxplot data=sorted_by_trt_var_plant ; Plot content*var (trt); title ' grouped by trt and var' ; run;
|
最後是把日期也加進來當作分類用的變數,我把日期放進block variables。
*字號後面的的分組變數只有能有一個。
最後提一下,若要使用block variables,在sort排序資料的時候,就要留意By排序各變數的順序喔!
/*okay but there are two panels (graphs)*/ proc sort data = case01_plant out=sorted_by_date_trt_var_plant; by date trt var; run; Proc boxplot data=sorted_by_date_trt_var_plant ; Plot content*var (date trt); title 'showed all data ' ; run;
|
沒有留言:
張貼留言