SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 614|回复: 3
打印 上一主题 下一主题

关于选取子集(数据集)的一个问题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2004-10-11 13:59:26 | 只看该作者

关于选取子集(数据集)的一个问题

data one;
input a b c d;
cards;
1 34 34 2
2  33 33 4
2 33 44 5
3 43 44 3
4 23 23 2
5 34 33 1
5 33 23 2
6 22 33 4
4 34 45 3
;
run;
现在考虑数据one中变a,如果a取某个值的频次大于1(如a=2的记录有第2条和第3条),此时根据变量d的优先顺序来决定改保留那条记录,d的优先顺序为:2 5 1 4 3 ,比方说a=2的记录有第2条和第3条,根据变量d的优先顺序,我们就保留第3条记录,将第2条记录删除。这样就可以得到原数据的一个子集。
请问如何用程序来实现?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2004-10-11 15:29:46 | 只看该作者

试试看

data one;
input a b c d;
cards;
1 34 34 2
2 33 33 4
2 33 44 5
3 43 44 3
4 23 23 2
5 34 33 1
5 33 23 2
6 22 33 4
4 34 45 3
;
run;
data one_1;
set one;
if d=2 then turn=1;
if d=5 then turn=2;
if d=1 then turn=3;
if d=4 then turn=4;
if d=3 then turn=5;
run;
proc sort data=one_1;
by a turn;
run;
data one_2;
set one_1;
by a turn;
if first.a;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2004-10-11 15:30:18 | 只看该作者

试试看

data one;
input a b c d;
cards;
1 34 34 2
2 33 33 4
2 33 44 5
3 43 44 3
4 23 23 2
5 34 33 1
5 33 23 2
6 22 33 4
4 34 45 3
;
run;
data one_1;
set one;
if d=2 then turn=1;
if d=5 then turn=2;
if d=1 then turn=3;
if d=4 then turn=4;
if d=3 then turn=5;
run;
proc sort data=one_1;
by a turn;
run;
data one_2;
set one_1;
by a turn;
if first.a;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2004-10-11 18:24:15 | 只看该作者

谢谢

竟然忘拉 first.*
谢谢各位!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-8 11:12 , Processed in 0.068413 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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