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

2023-05-19
关注

(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
您觉得本篇内容如何
评分

评论

您需要登录才可以回复|注册

提交评论

提取码
复制提取码
点击跳转至百度网盘