全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3546 3
2009-09-16
现在我有这样一个数据表,想把满足从时间1到时间5(是连续的,中间没有缺失某个时间)的观测值筛选出来,那些不是从时间1开始的,或者不是在时间5结束的,或者中间有缺失某个时间的观测值都不符合条件,请问怎么用sas编程啊?数据表的简单形式如下,
id        date          x
a1         1            x1
a1         3            x2
a1         5            x5
a2         1            y1
a2         2            y2
a2         3            y3
a2         4            y4
a2         5            y5
a3         2            z1
a3         3            z2
a3         4            z3
会的人帮帮忙啊!非常感谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2009-9-16 10:45:29
data a;                                                                                                                                 
input id $  date   x $;                                                                                                                 
datalines;                                                                                                                              
a1         1            x1                                                                                                              
a1         3            x2                                                                                                              
a1         5            x5                                                                                                              
a2         1            y1                                                                                                              
a2         2            y2                                                                                                              
a2         3            y3                                                                                                              
a2         4            y4                                                                                                              
a2         5            y5                                                                                                              
a3         2            z1                                                                                                              
a3         3            z2                                                                                                              
a3         4            z3                                                                                                              
;                                                                                                                                       
run;                                                                                                                                    
proc sql;                                                                                                                              
create table b as                                                                                                                       
select id, min(date) as date_min, max(date) as date_max, count(*) as total                                                      
from a                                                                                                                                 
group by id                                                                                                                             
having date_min=1 and date_max=5 and total=5;                                                                                          
select a.*                                                                                                                              
from a,b                                                                                                                                
where a.id=b.id;                                                                                                                        
quit;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2009-9-16 11:24:24
proc sql;
    select id, date, x
        from sgq0213
        group by id
    having sum(date) =15 and min(date)=1 and max(date)=5 and count(id) =5
    order by id, date;
quit;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2009-9-16 13:26:34
你的数据一点营养也没有,若date只能从1到5 而且不重的话 用下面就可以了

proc sql;select *  from a group by id  having count(date)=5;quit;

但是修改下原数据(如下),这样的date不符合你的1到5连续原则,用上面的两个跑出来的就是有问题的了

a1         1            x1
a1         3            x2
a1         5            x5
a2         1            y1
a2         1            y2
a2         3            y3
a2         5            y4
a2         5            y5
a3         2            z1
a3         3            z2
a3         4            z3

所以我认为满足你需要的应该是下面这样的
proc sql;create table b as
select * from a group by id having count(date)=count(distinct(date))=5 and date in(1,2,3,4,5)order by date;
create table final as select * from b group by id having count(date)=5 order by date;quit;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群