h**h 发帖数: 488 | 1 NO Sub_no
10004 1
10004 2
10005 1
10006 1
10006 1
10006 2
10006 3
10007 1
现在保留同样No 但sub有几个的。比如10005 and 10007只出现一次,不保留。
有efficient的方法来解决类似这样挑选数字的吗。 |
k*******a 发帖数: 772 | 2 try:
if first.no and last.no then delete; |
h**h 发帖数: 488 | 3 Didn't work. Nothing is deleted. |
k*******a 发帖数: 772 | 4 data a;
input no sub_no;
datalines;
10004 1
10004 2
10005 1
10006 1
10006 1
10006 2
10006 3
10007 1
;
data a;
set a;
by no;
if first.no and last.no then delete;
proc print data=a;run; |
h**h 发帖数: 488 | 5 我怎么忘了by no,怪不得什么都没有delete。
进一步,如果我想保留特定sub_no,比如10006有3个,这个怎么做呢。我总想有没有什
么search的路径,可以在data set中制定的column搜索需要的record。 |
c*******7 发帖数: 2506 | 6 or try
proc sql;
select * from a
group by no
having count(*)>1;
quit; |
j**********3 发帖数: 305 | 7
用retain 跟 first. 做个counter,不就好了
data a;
input no sub_no;
datalines;
10004 1
10004 2
10005 1
10006 1
10006 1
10006 2
10006 3
10007 1
;
data a;
set a;
by no;
retain counter;
if first.no then counter=0;
counter+1
run;
data sub_no2;
set a;
if counter=2 then output ;
run;
【在 h**h 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我怎么忘了by no,怪不得什么都没有delete。 : 进一步,如果我想保留特定sub_no,比如10006有3个,这个怎么做呢。我总想有没有什 : 么search的路径,可以在data set中制定的column搜索需要的record。
|
h**h 发帖数: 488 | 8 这样选择,10004有2个,counter选出来了;10006有4个,但counter也有2 ,也被
output出来。这样显示10004和10006都有2个,其实不是。
【在 j**********3 的大作中提到】![](/moin_static193/solenoid/img/up.png) : : 用retain 跟 first. 做个counter,不就好了 : data a; : input no sub_no; : datalines; : 10004 1 : 10004 2 : 10005 1 : 10006 1 : 10006 1
|
h**h 发帖数: 488 | 9 This works。It can show the number of observation I search.
【在 c*******7 的大作中提到】![](/moin_static193/solenoid/img/up.png) : or try : proc sql; : select * from a : group by no : having count(*)>1; : quit;
|
h**h 发帖数: 488 | 10 NO Sub_no time
10004 1 01/01/2010
10004 2 01/01/2010
10005 1 01/02/2010
10006 1 01/03/2010
10006 1 01/03/2010
10006 2 01/04/2010
10006 3 01/05/2010
10007 1 01/10/2010
加上时间,同一个no应该是同一天完成的。但比如10006是两天完成的。如何挑出来,
或者去除这种不在一天完成的No。 |
|
|
j**********3 发帖数: 305 | 11
那就加个last.no 判断就好了
data a;
set a;
by no;
retain counter;
if first.no then counter=0;
counter+1
run;
data sub_no2;
set a;
by no;
if last.no and counter=2 then output ;
run;
【在 h**h 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这样选择,10004有2个,counter选出来了;10006有4个,但counter也有2 ,也被 : output出来。这样显示10004和10006都有2个,其实不是。
|
c*******7 发帖数: 2506 | 12 挑出来-
proc sql;
create table b as
select no,count(unique(time)) as n
from a
group by no
having calculated n>1;
quit;
然后去掉-
proc sql;
create table a_new as
select * from a
where no not in (select no from b);
quit;
【在 h**h 的大作中提到】![](/moin_static193/solenoid/img/up.png) : NO Sub_no time : 10004 1 01/01/2010 : 10004 2 01/01/2010 : 10005 1 01/02/2010 : 10006 1 01/03/2010 : 10006 1 01/03/2010 : 10006 2 01/04/2010 : 10006 3 01/05/2010 : 10007 1 01/10/2010 : 加上时间,同一个no应该是同一天完成的。但比如10006是两天完成的。如何挑出来,
|
h**h 发帖数: 488 | |
p***r 发帖数: 920 | |
u**x 发帖数: 41 | 15 第二个data step 前先sort by no 试试!
【在 j**********3 的大作中提到】![](/moin_static193/solenoid/img/up.png) : : 那就加个last.no 判断就好了 : data a; : set a; : by no; : retain counter; : if first.no then counter=0; : counter+1 : run; : data sub_no2;
|