SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 714|回复: 7
打印 上一主题 下一主题

求教: 如何比较区间?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-11-24 09:47:13 | 只看该作者

求教: 如何比较区间?

假设一个dataset(其中(x,y)是个区间, group,x,y were sorted):

group x   y
...
b     5   10
b     10  22
b     11  21
b     16  25
c     1    5
...

问题: 在B group里,如何找出符合要求的obs,既x值介于其他records的区间里,比如,x=
11和x=16的records.

谢谢!!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-11-24 11:17:26 | 只看该作者

Re: 求教: 如何比较区间?

data raw;
        input group $ x y;
datalines;
b 5 10
b 10 22
b 11 15
b 16 17
;
run;

proc sort data=raw;
by group x y;
run;

data tmp;
        set raw;
        array x_(*) x0-x31;
        x0=x;
        do i =1 to 30;
                x_[i+1] =lag(x_[i]);
        end;

        array y_(*) y0-y31;
        y0=y;
        do i =1 to 30;
                y_[i+1] =lag(y_[i]);
        end;

        array mary{*} x1-x31;
        array nary{*} y1-y31;
        do i=1 to dim(mary);
                if mary{i}<x<nary{i} then output;
        end;
       
        drop x0-x31 y0-y31 i;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-11-24 11:37:37 | 只看该作者

Re: 求教: 如何比较区间?

非常感谢tanzhen_mysas,非常准确 .

但实际上原问题是这样的:
假设一个dataset(其中(x,y)是个区间, group,x,y were sorted),每个group里的records不等:

group x y
a  1  5
a  7  10
a  8  10
b 5 10
b 10 22
b 11 21
b 16 25
c 1 5
d 2  6
d  7  9
d  10  20
d  11 12
d  13 15
d  15 23
e  1 3
f  2  7
f  9  11
....

问题: 在每个group里,如何找出符合要求的records,既: x值介于其他records的区间里,比如,在group b里, x=
11和x=16的records.
谢谢!!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2009-11-25 17:32:24 | 只看该作者

Re: 求教: 如何比较区间?

data ahuige;
input group$ x y ;
cards;
a 1 5
a 7 10
a 8 10
b 5 10
b 10 22
b 11 21
b 16 25
c 1 5
d 2 6
d 7 9
d 10 20
d 11 12
d 13 15
d 15 23
e 1 3
f 2 7
f 9 11
;
run;

[code:1kyb58gf]proc sql;
    select distinct base.*
    from ahuige as base left join ahuige as rule
    on base.group=rule.group
    having rule.x<base.x and base.x<rule.y and not ( base.x=rule.x and base.y=rule.y)
    ;[/code:1kyb58gf]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2009-11-26 08:33:43 | 只看该作者

Re: 求教: 如何比较区间?

非常感谢ahuige. 实在是佩服.
不过几种特殊情况,还是解决不了,比如以下的dataset.
group x y
a 1 5
a 1 5
a 1 4
a 3 4
a 3 4
a 6 8
...
这种情况下,
a 1 5
a 1 5
a 1 4
a 3 4(1st记录)
这些就无法找出来.请教ahuige, 能否帮忙解决一下.谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2009-11-26 10:32:12 | 只看该作者

Re: 求教: 如何比较区间?

to: gogotiger
[quote:3crfiubq]x值介于其他records的区间里[/quote:3crfiubq]
是开区间还是闭区间呀? (rule.x,rule.y) [rule.x,rule.y] (rule.x,rule,y] [rule.x,rule.y)
[quote:3crfiubq]这种情况下,
a 1 5
a 1 5
a 1 4
a 3 4(1st记录)
这些就无法找出来[/quote:3crfiubq]
第一条'a 1 5'出现在结果中, 是要求当每group的前n条记录重复时,第一条记录也必须选取吗?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2009-11-26 11:35:48 | 只看该作者

Re: 求教: 如何比较区间?

to gogotiger

举一要会反三。无非就是楼上提示的开闭区间的问题,以及是否保留重复记录。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2009-11-27 09:07:24 | 只看该作者

Re: 求教: 如何比较区间?

感谢诸位的帮助.
均为开区间,而且要保留重复记录.

还有一个引申问题,如何找出相互有重合区间的所有记录?
对于这个问题,我的方案是:先按照现有的排序找出和其他有重合区间的记录,然后, 按照group,x升序排列,而y按照降序排列,按照同样的方法找出上步被重合的记录.最后两个合并.
这个方法有点不太满意,不知道大家能否提供很好的方法.
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-6 07:57 , Processed in 0.069120 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表