SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1132|回复: 9
打印 上一主题 下一主题

请教如何删除“不”重复数据?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2011-12-11 04:28:11 | 只看该作者

请教如何删除“不”重复数据?

比如下表:(实际表格中有近万条观测)
data sss;
input ch $ num;
cards;
A 1
A 2
B 3
C 3
C 2
C 6
D 6
E 7
E 4
;
凡是ch变量有重复出现的A,C,E等都要保留,不管num值为多少。同样ch变量名只出现过一次的B和D所在观测行都要删除,不管num为何值
目前在下只会nodupkey,反过来不知道怎么用……  查了help文件,dupout参数也必须在nodupkey之后才能用。那样不就本末倒置了么……
最后弱弱的问下,这个问题应该不需要用到Proc SQL命令了吧?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2011-12-11 10:21:52 | 只看该作者

Re: 请教如何删除“不”重复数据?

proc sql;
   create table new as
   select *,
          count(ch) as cnt
   from sss
   group by ch
   having cnt>1;
quit;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2011-12-11 17:18:07 | 只看该作者

Re: 请教如何删除“不”重复数据?

多谢!!
如果楼上的朋友是住在大陆的话,那起的还真早!
这个问题真的只能用proc sql吗?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2011-12-11 22:06:50 | 只看该作者

Re: 请教如何删除“不”重复数据?

[quote="neo":2svezpxr]多谢!!
如果楼上的朋友是住在大陆的话,那起的还真早!
这个问题真的只能用proc sql吗?[/quote:2svezpxr]

我一般这样用:
proc sort data=sss; by ch; run;
data new; set sss; by ch; if first.ch=last.ch then delete; run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2011-12-12 04:14:01 | 只看该作者

Re: 请教如何删除“不”重复数据?

也感谢dengzi!
我昨天试过类似命令,当时想如果满足“既是第一条记录又是最后一条记录”那就删除,我就直接写下了if first.XXX=if last.XXX,结果发现结果不正确,就僵住了……
原来是if first.XXX=last.XXX,不需要在last前加if,再次感谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2011-12-12 05:28:05 | 只看该作者

Re: 请教如何删除“不”重复数据?

刚刚用自己新建的表格运行了下,貌似用if first.xxx=last.xxx结果还是不对……
晚点我将自己的表格打出来
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2011-12-12 16:41:41 | 只看该作者

Re: 请教如何删除“不”重复数据?

请教dengzi
比如我有这一组数据stack
ID        Val
1        A7
1        A
1        B
2        B7
2        C
3        C7
3        C
3        S
3        B
4        C7
5        S7
5        S
6        A
6        B
7        S
使用命令后,记录为单个的确被删除了,但是ID为1的中间那条VAl为A的观测消失了……只剩下两条ID为1的观测了……
ID为3的观测中则被删掉了VAL值为C和S的两条观测,请问这是肿么了
proc sort data=ex.stack;
by id;
run;

data ex.dup;
set ex.stack;
by id;
if first.id=last.id then delete;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2011-12-12 23:07:45 | 只看该作者

Re: 请教如何删除“不”重复数据?

if first.id & last.id then delete;

[quote="neo":ogn1khuo]请教dengzi
比如我有这一组数据stack
ID        Val
1        A7
1        A
1        B
2        B7
2        C
3        C7
3        C
3        S
3        B
4        C7
5        S7
5        S
6        A
6        B
7        S
使用命令后,记录为单个的确被删除了,但是ID为1的中间那条VAl为A的观测消失了……只剩下两条ID为1的观测了……
ID为3的观测中则被删掉了VAL值为C和S的两条观测,请问这是肿么了
proc sort data=ex.stack;
by id;
run;

data ex.dup;
set ex.stack;
by id;
if first.id=last.id then delete;
run;[/quote:ogn1khuo]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2011-12-13 00:51:34 | 只看该作者

Re: 请教如何删除“不”重复数据?

这下终于对了!!
多谢Oloolo <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2011-12-13 10:12:18 | 只看该作者

Re: 请教如何删除“不”重复数据?

试试我这个。
data sss;
input ch $ num;
cards;
A 1
A 2
B 3
C 3
C 2
C 6
D 6
E 7
E 4
;
proc sort data=sss;
by ch;
run;
data new;
set sss;
by ch;
if first.ch then cnt=0;
cnt+1;
if last.ch then output;
run;
data new1;
set new;
if cnt&gt;1;
run;
proc sort data=sss;
by ch;
proc sort data=new1;
by ch;
data new2;
merge new1 sss;
by ch;
if cnt=. then delete;
drop cnt;
proc print data=new2;
run;
最后是排好序的结果。目前我还没办法还原。呵呵。还望指正!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-8 01:38 , Processed in 0.070381 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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