全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2408 8
2011-12-12
大家好!

小弟昨天在论坛上发了一个选样的帖子。目前还没有得到有效的答案。请大家再帮忙看看。谢谢

问题如下:
var1   var2
1
2
3        0
4        
5
6
7        0
8
9
10

选出var2为0位置前后两个观测值。不用两个Data步来实现,怎么弄?
我希望看到有效率的做法。毕竟可能选出30或者更多个观测,不建议用
proc expand data=....
convert var2=x/transform(lag 1)
convert var2=x/transform(lead 1)
run;
因为很多个,不可能一个一个的写~谢谢!
二维码

扫码加我 拉你入群

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

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

全部回复
2011-12-16 21:04:45
自己顶下~
二维码

扫码加我 拉你入群

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

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

2011-12-16 23:58:42
这个合适么?
data a;
input var1 var2;
cards;
1 .
2 .
3 0
4 .
5 .
6 .
7 0
8 .
9 .
10 .
;
run;

data b;
        set a;
        if var2=0 then do;
                need=_n_;
                do i=need-1 to need+1;
                set a point=i;
                output;
                end;
        end;
run;
二维码

扫码加我 拉你入群

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

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

2011-12-17 00:30:24
hi, 我也有个办法。

data temp1; set a;
retain calln 0;
calln+1;
run;

data temp2; set a;
where var2=0;

proc sql;
create table final
as select a.*, b.var1 as var1_picked
from temp2 as a left join temp1 as b
on a.calln+1=b.calln or a.calln-1=b.calln;
quit;
二维码

扫码加我 拉你入群

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

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

2011-12-17 20:05:55
275769263 发表于 2011-12-16 23:58
这个合适么?
data a;
input var1 var2;
对,这个太牛了~非常感谢!我得多向您学习才是啊~
二维码

扫码加我 拉你入群

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

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

2011-12-17 20:08:34
lltas7 发表于 2011-12-17 00:30
hi, 我也有个办法。

data temp1; set a;
谢谢您的回复,貌似这个段程序有问题:日志如下:

34   proc sql;
35   create table final
36   as select a.*, b.var1 as var1_picked
37   from temp2 as a left join temp1 as b
38   on a.calln+1=b.calln or a.calln-1=b.calln;
ERROR: 列 calln 在表/视图中未找到,其相关名为 A.
ERROR: 列 calln 在表/视图中未找到,其相关名为 A.
ERROR: 列 calln 在表/视图中未找到,其相关名为 A.
ERROR: 列 calln 在表/视图中未找到,其相关名为 A.
39   quit;
NOTE: SAS 系统由于错误而停止了该步的处理。
NOTE: “PROCEDURE SQL”所用时间(总处理时间):
      实际时间          0.13 秒
      CPU 时间          0.01 秒

上面的老师的做法是我心仪的做法。谢谢您的指导!
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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