2024年3月5日 星期二

SAS練習日誌 | proc boxplot 箱型圖

這篇記錄我摸索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;






沒有留言:

張貼留言