2016-09-08 47 views
2

我想如下排序後的字母字符nonalphabet字符(破折號)

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選項)是什麼?

+0

我編輯標題以獲得更好的可搜索性 - 我覺得如果有人知道搜索SORTSEQ,他們可能已經知道答案最多的時候,我的答案無論如何都包括SORTSEQ。爲了以防萬一,我在問題結尾處提到了SORTSEQ。 – Joe

回答

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; 
+0

好的答案,我從來沒有用過'proc trantab',但很高興知道它的作用。我的答案中有正確的想法,但不知道SAS有內置解決方案! – Longfish

0

我不認爲有任何選擇可以幫助你。 ' - '在ASCII中的字母之前,並且不會改變sortseq=選項中可用的其他整理序列。

實現您的目標的一種方法是將所有非字母字符更改爲以ASCII後面的字母爲單位的內容,例如'〜'。我不知道這對您的真實數據有多可行或實用。