在前面的文章SAS編程:頻數(shù)匯總時如何處理分析分組種類不全的情況鸿竖?中,介紹了Means過程步中使用Preloadfmt選項輸出分析分組計數(shù)為0的記錄铸敏。
我們在分組計數(shù)時缚忧,除了要求所有分析分組都輸出外,有時還需要使分組類別以固定的順序輸出杈笔。后者常發(fā)生在分組變量類別無明顯的順序邏輯關(guān)系(例如闪水,Race的匯總輸出),或分組變量有順序邏輯關(guān)系但默認(rèn)排序與邏輯順序不同的情況下(例如桩撮,Sex的匯總輸出)敦第。
上一篇文章,輸出的Sex匯總結(jié)果如下店量,這時候如果要求輸出結(jié)果以Male芜果、Female的順序輸出,如何處理呢融师?
與上一篇文章對應(yīng)右钾,也是兩種方法。
Dummy數(shù)據(jù)集
第一種旱爆,在Dummy數(shù)據(jù)集時舀射,新建一個排序變量對應(yīng)每一個分組類別的位置,最后輸出時按該變量排序怀伦。
具體的演示代碼如下:
**Get data from sashelp.class;
data class;
set sashelp.class;
where sex = "M";
run;
**Count for each sex category;
proc freq data = class;
tables sex / out = result1(keep = sex count);
run;
**Create a dummy dataset for missing category;
data dummy;
length sex $1;
sex = "F"; ord = 2; output;
sex = "M"; ord = 1; output;
run;
**Merge result dataset with dummy dataset;
data result;
merge dummy result1;
by sex;
if count = . then count = 0;
proc sort;
by ord;
run;
最后輸出結(jié)果實現(xiàn)了脆烟,Male在前、Female在后的排列效果房待。
Preloadfmt + Notsorted選項
第二種邢羔,在使用Preloadfmt選項設(shè)置分組變量的Format時,使用notsorted
選項固定分組變量的Format的順序桑孩。
關(guān)于Format過程步的notsorted
選項的介紹拜鹤,可以參考這篇文章,SAS編程:Proc Format中NOTSORTED選項簡介流椒。
示例代碼如下:
**Get data from sashelp.class;
data class2;
set sashelp.class;
where sex = "M";
*Create count flag;
flag = 1;
run;
**Set format for class var;
proc format;
value $sex (notsorted)
"M"="Male"
"F"="Female"
;
run;
**Get count;
proc means data = class2 nway completetypes;
class sex/ preloadfmt order = data;
var flag;
output n=count out = result2;
format sex $sex.;
run;
這里有一個注意點敏簿,除了使用preloadfmt
、notsorted
選項外,在Means過程步的Class語句中惯裕,還需要使用 order = data
這一個選項温数,這樣才能實現(xiàn)按照Format定義的順序進(jìn)行輸出。讀者可以自行復(fù)制代碼轻猖,進(jìn)行修改驗證帆吻。
Means過程步Class語句中的order =
選項總共有4種排序方式,具體每一種排序方式的說明可以參考官方文檔 SAS Help Center: Syntax: PROC MEANS CLASS Statement咙边。
- DATA
- FORMATTED
- FREQ
- UNFORMATTED
結(jié)語
Preloadfmt
以及notsorted
選項能夠解決頻數(shù)匯總時分組類別計數(shù)為0與分組類別排序問題猜煮,同時也能夠簡化代碼,推薦讀者朋友們在頻數(shù)匯總中使用這兩個選項败许。
感謝閱讀王带!若有疑問,歡迎評論區(qū)交流市殷!