我想如下排序後的字母字符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選項)是什麼?
我想如下排序後的字母字符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選項)是什麼?
據我所知,唯一可以做到這一點的方法(改變排序順序,以便在字母字符後面出現破折號)將使用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;
好的答案,我從來沒有用過'proc trantab',但很高興知道它的作用。我的答案中有正確的想法,但不知道SAS有內置解決方案! – Longfish
我不認爲有任何選擇可以幫助你。 ' - '在ASCII中的字母之前,並且不會改變sortseq=
選項中可用的其他整理序列。
實現您的目標的一種方法是將所有非字母字符更改爲以ASCII後面的字母爲單位的內容,例如'〜'。我不知道這對您的真實數據有多可行或實用。
我編輯標題以獲得更好的可搜索性 - 我覺得如果有人知道搜索SORTSEQ,他們可能已經知道答案最多的時候,我的答案無論如何都包括SORTSEQ。爲了以防萬一,我在問題結尾處提到了SORTSEQ。 – Joe