在字母字符后排序非字母字符(破折号)

时间:2016-09-08 09:43:45

标签: sorting sas

我正在尝试按如下方式对数据集进行排序

data X;
input name$; 
    cards; 
ab 
abb
b--
ba
; run;

我用

proc sort data=X ; by name; run;

输出是:

ab
abb
b--
ba

但是我看到我希望输出为

ab
abb
ba
b--

我可以使用的proc排序中的选项是什么(SORTSEQ选项)?

2 个答案:

答案 0 :(得分:2)

据我所知,你可以做到这一点的唯一方法(更改排序顺序,以便在字母字符后出现破折号)将使用PROC TRANTAB来定义用户定义的转换表,其后出现破折号那些字母,然后在SORTSEQ中使用它:

例如,在这里,我将短划线移到字母' z' (' {'是ASCII校对序列中字母' z'后面的字符):

proc trantab table=ascii;
  list one;
  save table=nodash;
  replace '-' '{';
    save table=nodash;
  list one;
  run;
quit;

data X;
  input name$; 
cards; 
ab 
abb
b--
ba
; 
run;
proc sort data=x sortseq='nodash';
by name;
run;

答案 1 :(得分:0)

我认为没有任何选择可以帮助你。 ' - '出现在ASCII字母之前,并且对sortseq=选项中可用的其他整理顺序没有变化。

实现目标的一种方法是将所有非字母字符更改为ASCII字母后面的字符,例如'〜'。我不知道这对您的真实数据有多可行或实用。