楼主: sunnytree
14948 25

请教sas中的排序问题 [推广有奖]

  • 1关注
  • 0粉丝

硕士生

54%

还不是VIP/贵宾

-

威望
0
论坛币
264 个
通用积分
0
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
11687 点
帖子
158
精华
0
在线时间
201 小时
注册时间
2009-2-5
最后登录
2025-10-19

楼主
sunnytree 发表于 2010-7-21 09:48:38 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
按照某个variable排序,可以用proc sort,那如果是想按照某个observation 排序,应该用什么命令?或怎样编程?

期待大侠指教,谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:observation Variable observat ATION 怎样编程 怎样编程

沙发
pobel 在职认证  发表于 2010-7-21 10:12:37
何为按照observation排序?
和谐拯救危机

藤椅
sunnytree 发表于 2010-7-21 10:21:50
不好意思,可能我没表达清楚

举个例子:
date    return1   return2   return3    return4
0101     12.3      14.5          2.7             9.3
0102     -1.6         4.8          20.3           3.4
0103     6.2         0.8             7.5             10.6

如何按照0101这一行的数据从大到小排序,整理数据集?

板凳
BraveMadMan 发表于 2010-7-21 10:29:27
3# sunnytree


用proc transpose把数据掉个个,然后再proc sort排序。比如:

data have;
input date $   return1-return4;
cards;
0101     12.3      14.5          2.7             9.3
0102     -1.6         4.8          20.3           3.4
0103     6.2         0.8             7.5             10.6
;
run;

proc transpose data=have out=want prefix=date_;
     id date;
      var return1-return4 ;
run;
proc sort; by date_0101;
run;
已有 1 人评分热心指数 收起 理由
crackman + 1

总评分: 热心指数 + 1   查看全部评分

报纸
pobel 在职认证  发表于 2010-7-21 11:21:43
data have;
input date $   return1-return4;
call sortn(return4,return3,return2,return1);
cards;
0101   12.3   14.5   2.7    9.3
0102   -1.6   4.8    20.3   3.4
0103   6.2    0.8    7.5     10.6
;
run;
和谐拯救危机

地板
wkn1986 发表于 2010-7-21 11:32:36
data wkn;
input date $  return1 return2 return3 return4;
cards;

0101     12.3   14.5   2.7    9.3
0102     -1.6   4.8    20.3    3.4
0103     6.2    0.8    7.5     10.6
;
run;
data wkn1;
set wkn;
array a(*) return1-return4;
do i=dim(a)-1 to 1 by -1;
do j=1 to i;
if a(j)>a(j+1) then do;
kk=a(j+1);
a(j+1)=a(j);
a(j)=kk;
end;
end;end;
drop kk i j;
run;
已有 1 人评分热心指数 收起 理由
crackman + 1

总评分: 热心指数 + 1   查看全部评分

7
BraveMadMan 发表于 2010-7-21 11:38:53
pobel 发表于 2010-7-21 11:21
data have;
input date $   return1-return4;
call sortn(return4,return3,return2,return1);
cards;
0101   12.3   14.5   2.7    9.3
0102   -1.6   4.8    20.3   3.4
0103   6.2    0.8    7.5     10.6
;
run;
牛,跟高手学了sortn的用法。

不过个人感觉排序后应该保持数据原有的结构。
Don't get lost in technical details. What is the big picture?

8
sxlion 发表于 2010-7-21 15:03:22
call sort 排列所有观察值的顺序,不符合楼主要求。

9
soporaeternus 发表于 2010-7-21 15:06:56
如果是每行按大小重排变量,那么显然call sortn是最好的

如果是以某行值的大小顺序来重新命名变量(挺奇怪的规则)
个人感觉变量数不太多的情况下,手工来排吧
真的一定要"自动"就是4楼那样,抽出一条,转置排序,确定rename规则,rename

期待好的解决方案
Let them be hard, but never unjust

10
pobel 在职认证  发表于 2010-7-21 15:29:54
sxlion 发表于 2010-7-21 15:03
call sort 排列所有观察值的顺序,不符合楼主要求。
只要加个if语句就可以对指定条件的观测排序了。

if date="1010" then call sortn().....
和谐拯救危机

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-28 20:27