(1)字符型變量按照拼音首字母排序
在做AE一類的table時,經常會有要求,需要我們先按照例次降序排序,如果例次相同按照SOC拼音首字母排序,例次降序排好理解,但是怎樣才能實現對字符型變量按照拼音排序呢?用一個例子來讓大家理解:
/ 測試數據集 /
data test;
set order;
count_c=put(count,best.);
run;
/ 結果如下: /
通常我們在處理此類問題時會想到用proc sort來對其進行排序
proc sort data=test out =test1 ;
by descending count soc;
run;
/ 結果如下: /
紅框部分“肝膽系統疾病”的例次為2,排在“各種先天性家族性遺傳性疾病”的前面似乎沒什么問題,但是接下來的兩個紅框的例次都為1,此時應按照SOC拼音首字母排序,但是“各“的首字母應在”耳“的的后面,但是卻排在了前面,所以可以肯定的是用上述程序想要對SOC按拼音排序肯定是行不通的!
/ 解決方案如下: /
proc sort data=test out =test1 sortseq=linguistic(locale=zh_CN collation=PINYIN);
by descending count soc;
run;
其實方法很簡單,用sort過程步里面的選項linguistic(locale=zh_CN collation=PINYIN);就可以實現了,大家可以試一下。得到的數據集如下。
但是經過多次實驗,上述的option是無法識別多音字的,多音字的時候,系統會默認按照出現最早的那個拼音字母排序。
在此舉一個例子:“咳嗽”。“咳”這個字是多音字,有“hai” 和“ke“兩個讀音,系統會優先選擇hai這個讀音,因為h在k的前面。這樣排序下來,可能會導致有些多音字沒有按照我們的習慣讀音來排序。提醒大家注意。
(2)字符型變量的數字排序
接著用上面的數據集舉例:count_c為字符型變量,但是存放的是數字,如果直接用proc sort對count_c排序,得到的結果并不是我們想要得到的。
data test;
set order;
count_c=strip(put(count,best.));
run;
proc sort data=test out =test1 ;
by count_c;
run;
/ 解決方案如下: /
procsort data=test out =test1 sortseq=linguistic(numeric_collation=on);
by count_c;
run;
用sort過程步里面的sortseq=linguistic(numeric_collation=on)就可以實現了。得到的數據集如下,大家可以自己對比,跟用數值型結果count排序的結果是一樣的。
-
SAS
+關注
關注
2文章
521瀏覽量
32834
發布評論請先 登錄
相關推薦
評論