楼主: sgx0213
3599 3

请教:如何从数据表中得到满足条件的观测值? [推广有奖]

  • 1关注
  • 0粉丝

本科生

6%

还不是VIP/贵宾

-

威望
0
论坛币
274 个
通用积分
1.2000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
706 点
帖子
104
精华
0
在线时间
36 小时
注册时间
2005-11-4
最后登录
2024-12-1

楼主
sgx0213 发表于 2009-9-16 09:16:11 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
现在我有这样一个数据表,想把满足从时间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
会的人帮帮忙啊!非常感谢!
二维码

扫码加我 拉你入群

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

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

关键词:观测值 数据表 SAS编程 date 非常感谢 数据 请教 条件 观测

回帖推荐

david0 发表于2楼  查看完整内容

data a; input id $ date x $; datalines; ...

yongyitian 发表于3楼  查看完整内容

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;

本帖被以下文库推荐

沙发
david0 发表于 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;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

藤椅
yongyitian 发表于 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;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

板凳
sushe1527 发表于 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;

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-19 16:57