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

标签 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 sort 中的什么选项(SORTSEQ 选项)?

最佳答案

据我所知,执行此操作的唯一方法(更改排序顺序,以便破折号出现在字母字符后面)是使用 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;

关于将非字母字符(破折号)排序在字母字符之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39387617/

相关文章:

c# - 使用 Collat​​ionInfo.Comparer 在 c# 和 SQL 之间实现一致排序

SAS : how to test if a variable is numeric

SAS - 大小字符和数字

sas - symexist 函数如何工作?

javascript - 按最常见的项目在 javascript 中排序数组

Java:移位/旋转对象数组

c - qsort 无法正确排序 C 中结构体的指针数组

php - 如何在每次迭代中以从上到下的方式旋转数组元素

Python - [例如] : print(f'type(var) = {type(var)}') 是否有简写

sas - 用于连接到 SAS 的 Java API