h******n 发帖数: 232 | 1 举例数据如下:
x y
1 2
2 0
3 2
4 2
5 2
6 2
7 2
8 2
9 0
10 2
我要从x=5开始向上和向下找,分别找到第一次y不等于2的那行值,并且输出。应该如
何写?
谢谢! |
d*******1 发帖数: 854 | 2 太复杂,又想不出别的好办法。
data test;
input x y;
cards;
1 2
2 0
3 2
4 2
5 2
6 2
7 2
8 2
9 0
10 2
;
run;
data testx;
set test;
retain flgx;
if _n_=1 and x ne 5 then flgx=-1;
else if x=5 then flgx=1;
if y ne 2 then flgy=-1;
else flgy=1;
run;
proc sort data=testx out=testxx; by flgx flgy; run;
data result;
set testxx;
by flgx flgy;
if (last.flgy and flgx=-1 and flgy=-1) or
(first.flgy and flgx=1 and flgy=-1)
then output;
drop flgx flgy;
run;
【在 h******n 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 举例数据如下: : x y : 1 2 : 2 0 : 3 2 : 4 2 : 5 2 : 6 2 : 7 2 : 8 2
|
h******n 发帖数: 232 | 3 非常感谢!
附加一个问题,
楼上答案的输出是
x y
2 0
9 0
如何把这两个observation的中间的数据(在原始数据中)output出来呢?
再次感谢! |
d*******1 发帖数: 854 | 4 gees, that is almost entirely different question! try the followings:
data test;
input x y;
cards;
1 2
2 0
3 2
4 2
5 2
6 2
7 2
8 2
9 0
10 2
;
run;
data testx;
set test;
retain flgx;
if _n_=1 and x ne 5 then flgx=-1;
else if x=5 then flgx=1;
if y ne 2 then flgy=-1;
else flgy=1;
order=_n_;
run;
proc sort data=testx out=testxx; by flgx flgy; run;
data result;
set testxx;
by flgx flgy;
if (last.flgy and flgx=-1 and flgy=-1) or
(first.flgy and flgx=1 and flgy=-1)
then output;
drop flgx flgy;
run;
dat
【在 h******n 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 非常感谢! : 附加一个问题, : 楼上答案的输出是 : x y : 2 0 : 9 0 : 如何把这两个observation的中间的数据(在原始数据中)output出来呢? : 再次感谢!
|