但实际上原问题是这样的:
假设一个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.
谢谢!!!作者: shiyiming 时间: 2009-11-25 17:32 标题: 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]作者: shiyiming 时间: 2009-11-26 08:33 标题: 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, 能否帮忙解决一下.谢谢!作者: shiyiming 时间: 2009-11-26 10:32 标题: 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条记录重复时,第一条记录也必须选取吗?作者: shiyiming 时间: 2009-11-26 11:35 标题: Re: 求教: 如何比较区间? to gogotiger