SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 871|回复: 6
打印 上一主题 下一主题

如何个性化排序?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2010-7-13 10:31:55 | 只看该作者

如何个性化排序?

现有一个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个字母一个随机顺序排列,有什么好的解决方法吗?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2010-7-13 11:25:50 | 只看该作者

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,感觉没第一个方便
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2010-7-20 12:43:56 | 只看该作者

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]

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

但是如果是个字符串,就做不了。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2010-7-20 21:55:17 | 只看该作者

Re: 如何个性化排序?

to sxlion
2。 用sortseq=TRANSLATION TABLE 选项。你需要先用PROC TRANTAB,感觉没第一个方便

do ur homework
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2010-7-21 01:03:18 | 只看该作者

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来搞定,谁来试试?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2010-7-21 01:27:00 | 只看该作者

Re: 如何个性化排序?

看了下相关文章sortseq 只是SAS9新增加的功能,SAS8 是没有的。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2010-7-21 23:10:50 | 只看该作者

Re: 如何个性化排序?

to sxlion
you are implementing the same idea as sortseq=translate table
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-4 03:27 , Processed in 0.069855 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表