SAS中文论坛

标题: 如何个性化排序? [打印本页]

作者: shiyiming    时间: 2010-7-13 10:31
标题: 如何个性化排序?
现有一个data:
data ex;
input  ch $ x1-x3;
cards;
a 1 3
b 3 5
c 5 5
d  5 6
;


这个是按变量ch排好序的,但是我现在需要更换排序规则,将变量ch按照a,c,d,b排列, 如何可以做得到呢?

当然,由于也许实际规则更复杂,比如说按26个字母一个随机顺序排列,有什么好的解决方法吗?
作者: shiyiming    时间: 2010-7-13 11:25
标题: Re: 如何个性化排序?
1。用这个本办法
data exv/view=exv;
       set  ex;
       newch=put(ch, newfmt.); /* define your ordering in newfmt. */
run;

proc sort data=exv  out=ex2(drop=newch) sortsize=max;
       by newch;
run;


2。 用sortseq=TRANSLATION TABLE 选项。你需要先用PROC TRANTAB,感觉没第一个方便
作者: shiyiming    时间: 2010-7-20 12:43
标题: Re: 如何个性化排序?
[code:3bsg1h19]proc format;
invalue newfmt   
       'a'=1
       'c'=2
       'd'=3
       'b'=4;
run;
data ex;
input ch $ x1-x2;
cards;
a 1 3
aa 2 0
ab 2 1
ac 2 2
ad 2 3
b 2 5
c 3 5
d 4 6
;

data exv/view=exv;
set ex;
newch=input(ch, newfmt.); /* define your ordering in newfmt. */
run;

proc sort data=exv out=ex2(drop=newch) sortsize=max;
by newch;
run;[/code:3bsg1h19]

谢谢,可以解决一个字母的排序问题。

但是如果是个字符串,就做不了。
作者: shiyiming    时间: 2010-7-20 21:55
标题: Re: 如何个性化排序?
to sxlion
2。 用sortseq=TRANSLATION TABLE 选项。你需要先用PROC TRANTAB,感觉没第一个方便

do ur homework
作者: shiyiming    时间: 2010-7-21 01:03
标题: Re: 如何个性化排序?
How about this idea ?
Only one fucntion got it !

[code:168ucmgk]data ex;
input ch $ x1-x2;
cards;
a 1 3
aa 2 0
ab 2 1
ac 2 2
ad 2 3
b 2 5
c 3 5
d 4 6
;
run;

%let old='abcdefghijklmnopqrstuvwxyz';  
%let new='acbdefghijklmnopqrstuvwxyz';    /*set what you want here */

data ex;
    set ex;
    newch = translate(ch,&new.,&old.);
run;
proc sort data=ex out=ex2(drop=newch);
    by newch;
run;[/code:168ucmgk]

看了下sortseq,除了提供几种大路的选项外,好像可以通过a user-created translation table来搞定,谁来试试?
作者: shiyiming    时间: 2010-7-21 01:27
标题: Re: 如何个性化排序?
看了下相关文章sortseq 只是SAS9新增加的功能,SAS8 是没有的。
作者: shiyiming    时间: 2010-7-21 23:10
标题: Re: 如何个性化排序?
to sxlion
you are implementing the same idea as sortseq=translate table




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2