SAS:字符型变量的两种排序方式

电子说

1.3w人已加入

描述

(1)字符型变量按照拼音首字母排序

  在做AE一类的table时,经常会有要求,需要我们先按照例次降序排序,如果例次相同按照SOC拼音首字母排序,例次降序排好理解,但是怎样才能实现对字符型变量按照拼音排序呢?用一个例子来让大家理解:

/ 测试数据集 /

data test;

set order;

count_c=put(count,best.);

run;

/ 结果如下: /

SAS

通常我们在处理此类问题时会想到用proc sort来对其进行排序

proc sort data=test out =test1 ;

by descending count soc;

run;

/ 结果如下: /

SAS

红框部分“肝胆系统疾病”的例次为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);就可以实现了,大家可以试一下。得到的数据集如下。

SAS

  但是经过多次实验,上述的option是无法识别多音字的,多音字的时候,系统会默认按照出现最早的那个拼音字母排序。

  在此举一个例子:“咳嗽”。“咳”这个字是多音字,有“hai” 和“ke“两个读音,系统会优先选择hai这个读音,因为h在k的前面。这样排序下来,可能会导致有些多音字没有按照我们的习惯读音来排序。提醒大家注意。

(2)字符型变量的数字排序

  接着用上面的数据集举例:count_c为字符型变量,但是存放的是数字,如果直接用proc sort对count_c排序,得到的结果并不是我们想要得到的。

data test;

set order;

  count_c=strip(put(count,best.));

run;

SAS

proc sort data=test out =test1 ;

by count_c;

run;

SAS

/ 解决方案如下: /

proc sort data=test out =test1 sortseq=linguistic(numeric_collation=on);

by count_c;

run;

用sort过程步里面的sortseq=linguistic(numeric_collation=on)就可以实现了。得到的数据集如下,大家可以自己对比,跟用数值型结果count排序的结果是一样的。

SAS

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 相关推荐
  • SAS

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分