SAS中文论坛

标题: 请教如何删除“不”重复数据? [打印本页]

作者: shiyiming    时间: 2011-12-11 04:28
标题: 请教如何删除“不”重复数据?
比如下表:(实际表格中有近万条观测)
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命令了吧?
作者: shiyiming    时间: 2011-12-11 10:21
标题: Re: 请教如何删除“不”重复数据?
proc sql;
   create table new as
   select *,
          count(ch) as cnt
   from sss
   group by ch
   having cnt>1;
quit;
作者: shiyiming    时间: 2011-12-11 17:18
标题: Re: 请教如何删除“不”重复数据?
多谢!!
如果楼上的朋友是住在大陆的话,那起的还真早!
这个问题真的只能用proc sql吗?
作者: shiyiming    时间: 2011-12-11 22:06
标题: 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;
作者: shiyiming    时间: 2011-12-12 04:14
标题: Re: 请教如何删除“不”重复数据?
也感谢dengzi!
我昨天试过类似命令,当时想如果满足“既是第一条记录又是最后一条记录”那就删除,我就直接写下了if first.XXX=if last.XXX,结果发现结果不正确,就僵住了……
原来是if first.XXX=last.XXX,不需要在last前加if,再次感谢!
作者: shiyiming    时间: 2011-12-12 05:28
标题: Re: 请教如何删除“不”重复数据?
刚刚用自己新建的表格运行了下,貌似用if first.xxx=last.xxx结果还是不对……
晚点我将自己的表格打出来
作者: shiyiming    时间: 2011-12-12 16: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;
作者: shiyiming    时间: 2011-12-12 23:07
标题: 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]
作者: shiyiming    时间: 2011-12-13 00:51
标题: Re: 请教如何删除“不”重复数据?
这下终于对了!!
多谢Oloolo <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
作者: shiyiming    时间: 2011-12-13 10:12
标题: 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;
最后是排好序的结果。目前我还没办法还原。呵呵。还望指正!




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