SAS中文论坛

标题: 请教:利用nodupkey可以去重复数据,但有没有简单办法把重复数据挑出来 [打印本页]

作者: shiyiming    时间: 2012-11-8 11:16
标题: 请教:利用nodupkey可以去重复数据,但有没有简单办法把重复数据挑出来
/**********************
利用nodupkey可以去重复数据,但有没有简单办法把重复数据挑出来,例如:
************************/
data abs;
input blh  $15. ksdm $15. rq yymmdd10.;
cards;
PID000529036        8楼儿童病区        2012-3-13
PID000529036        ICU                        2012-3-13
PID000529036        ICU                        2012-3-14
PID000529036        ICU                        2012-3-15
PID000529036        6楼儿童病区2        2012-3-13
PID000531543        8楼儿童病区        2012-3-14
PID000531543        ICU                        2012-3-15
PID000531543        ICU                        2012-3-16
;

只显示出重复的部分(相同时间,相同地点),例如:
PID000529036        ICU                        2012-3-15
PID000531543        ICU                        2012-3-15
作者: shiyiming    时间: 2012-11-8 12:58
标题: Re: 请教:利用nodupkey可以去重复数据,但有没有简单办法把重复数据挑出来
[code:2b25p2fh]

data abs;
input blh $12. ksdm : $ 15. rq yymmdd10.;
cards;
PID000529036 8楼儿童病区 2012-3-13
PID000529036 ICU 2012-3-13
PID000529036 ICU 2012-3-14
PID000529036 ICU 2012-3-15
PID000529036 6楼儿童病区2 2012-3-13
PID000531543 8楼儿童病区 2012-3-14
PID000531543 ICU 2012-3-15
PID000531543 ICU 2012-3-16
;

proc sort data=abs out=one;
  by ksdm rq;
run;

data two three;
set one;
by ksdm rq;
if first.rq ^=last.rq then output two;
else output three;
run;



[/code:2b25p2fh]
作者: shiyiming    时间: 2012-11-8 18:07
标题: Re: 请教:利用nodupkey可以去重复数据,但有没有简单办法把重复数据挑出来
神一般的回答,没想到可以这样解决,谢谢版主!
作者: shiyiming    时间: 2012-11-8 18:20
标题: 请教:利用nodupkey可以去重复数据,但有没有简单办法把重复数据挑出来
如果还有其他好的办法,请继续指教!拓展下视野
作者: shiyiming    时间: 2012-11-22 15:27
标题: Re: 请教:利用nodupkey可以去重复数据,但有没有简单办法把重复数据挑出来
data abs;
input blh $12. ksdm : $ 15. rq yymmdd10.;
cards;
PID000529036 8楼儿童病区 2012-3-13
PID000529036 ICU 2012-3-13
PID000529036 ICU 2012-3-14
PID000529036 ICU 2012-3-15
PID000529036 6楼儿童病区2 2012-3-13
PID000531543 8楼儿童病区 2012-3-14
PID000531543 ICU 2012-3-15
PID000531543 ICU 2012-3-16
;
run;

proc sql;
   create table aa as
   select a.*
   from abs as a
   group by blh,ksdm
   having count (ksdm)>=2;
quit;

这样应该也可以找到重复的数据。找出重复接受同类治疗的患者~
作者: shiyiming    时间: 2012-11-24 10:30
标题: Re: 请教:利用nodupkey可以去重复数据,但有没有简单办法把重复数据挑出来
感谢linkidy的回复,我运行你的代码,没有得到我想要的结果,我也想过这种方法,似乎行不通
作者: shiyiming    时间: 2012-11-25 11:40
标题: Re: 请教:利用nodupkey可以去重复数据,但有没有简单办法把重复数据挑出来
linkidy的方式是对的
[code:6rw6p95l]
proc sql;
create table aa as
select a.*
from abs as a
group by ksdm,rq
having count (rq)>=2;
quit;
[/code:6rw6p95l]
作者: shiyiming    时间: 2012-11-25 15:30
标题: Re: 请教:利用nodupkey可以去重复数据,但有没有简单办法把重复数据挑出来
感谢linkidy的思路,感谢版主的帮助。
这个思路可以作为解决这类问题办法之一,值得借鉴,再次感谢!
作者: shiyiming    时间: 2012-11-27 21:13
标题: Re: 请教:利用nodupkey可以去重复数据,但有没有简单办法把重复数据挑出来
[code:26evcp83]
data abs;
input blh $12. ksdm : $ 15. rq yymmdd10.;
cards;
PID000529036 8楼儿童病区 2012-3-13
PID000529036 ICU 2012-3-13
PID000529036 ICU 2012-3-14
PID000529036 ICU 2012-3-15
PID000529036 6楼儿童病区2 2012-3-13
PID000531543 8楼儿童病区 2012-3-14
PID000531543 ICU 2012-3-15
PID000531543 ICU 2012-3-16
;

proc sql;

create table one as
select *
from abs
order by
ksdm,rq;

create table two as
select *, monotonic() as id
from one;

create table three as
select *
from two
group by ksdm,rq
having max(id)^=min(id);

alter table three drop id;

quit;
[/code:26evcp83]
作者: shiyiming    时间: 2012-12-5 14:38
标题: Re: 请教:利用nodupkey可以去重复数据,但有没有简单办法把重复数据挑出来
版主的第一种方法是求出相同数据的第一条和最后一条数据,如果要输出所有的重复值,需要修改判断语句如下:
将语句
if first.rq^=last.rq then output two;
修改为:
if first.rq^=last.rq or (last.rq =0 and first.rq=0) then output two;
作者: shiyiming    时间: 2012-12-7 11:14
标题: Re: 请教:利用nodupkey可以去重复数据,但有没有简单办法把重复数据挑出来
支用将表读入hash中,然后调用find函数,输出,效率还高,不过数据量不能超过其内存大小。
作者: shiyiming    时间: 2012-12-20 23:15
标题: Re: 请教:利用nodupkey可以去重复数据,但有没有简单办法把重复数据挑出来
模糊记得可以直接sort输出,刚查了下help,确认了下可以这样(V9.3)

[code:2iomnahs]data abs;
input blh $12. ksdm : $15. rq yymmdd10.;
attrib rq format=yymmdd10.;
cards;
PID000529036 8楼儿童病区 2012-3-13
PID000529036 ICU 2012-3-13
PID000529036 ICU 2012-3-14
PID000529036 ICU 2012-3-15
PID000529036 6楼儿童病区2 2012-3-13
PID000531543 8楼儿童病区 2012-3-14
PID000531543 ICU 2012-3-15
PID000531543 ICU 2012-3-16
;
run;

* V9.3
proc sort data=abs out=_a1 UNIQUEOUT=_a2 NOUNIQUEkey;
        by  ksdm rq;
run;

* V9.1的时候
proc sort data=abs out=_b1 dupout=_b2 nodupkey;
        by ksdm rq;
run;
[/code:2iomnahs]
作者: shiyiming    时间: 2012-12-22 10:17
标题: Re: 请教:利用nodupkey可以去重复数据,但有没有简单办法把重复数据挑出来
Good idea! This could be a little more concise:

proc sql;
        create table one_a as
        select *, monotonic() as id
        from abs
        order by ksdm,rq;

        create table two_a as
        select *
        from one_a
        group by ksdm,rq
        having max(id) ne min(id);

        alter table two_a drop id;
quit;

[quote="MerlinZHOU":2pm7kenj][code:2pm7kenj]
data abs;
input blh $12. ksdm : $ 15. rq yymmdd10.;
cards;
PID000529036 8楼儿童病区 2012-3-13
PID000529036 ICU 2012-3-13
PID000529036 ICU 2012-3-14
PID000529036 ICU 2012-3-15
PID000529036 6楼儿童病区2 2012-3-13
PID000531543 8楼儿童病区 2012-3-14
PID000531543 ICU 2012-3-15
PID000531543 ICU 2012-3-16
;

proc sql;

create table one as
select *
from abs
order by
ksdm,rq;

create table two as
select *, monotonic() as id
from one;

create table three as
select *
from two
group by ksdm,rq
having max(id)^=min(id);

alter table three drop id;

quit;
[/code:2pm7kenj][/quote:2pm7kenj]
作者: shiyiming    时间: 2013-1-6 23:25
标题: Re: 请教:利用nodupkey可以去重复数据,但有没有简单办法把重复数据挑出来
[quote="faithd":rkoxlgzz]版主的第一种方法是求出相同数据的第一条和最后一条数据,如果要输出所有的重复值,需要修改判断语句如下:
将语句
if first.rq^=last.rq then output two;
修改为:
if first.rq^=last.rq or (last.rq =0 and first.rq=0) then output two;[/quote:rkoxlgzz]


If first.rq and last.rq then delete;




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