全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5104 30
2009-08-21
悬赏 500 个论坛币 已解决
code   day    event     x
1         02        0       1.9
1         03        0       3.3
1         04        1       -4
1         05        1       18
2         01        0        6
2         02        0       4
2         03        1        7

其中:event为指示变量,当=1表示某事件发生;code表示代码,day表示日期,x表示要计算的变量。
现在的问题是,如何运用SAS编程实现:找出event=1的观测,计算它前两天x的均值。以上面数据为例,day=04时,event=1,所以对该天来说,前两天x的均值=(1.9+3.3)/2;day=05时,event=1,所以对该天来说,前两天x的均值=(3.3-4)/2。
从而得到如下结果:

code day  event     x     mean
1        04   1          -4        2.6
1        05   1          18   -0.35
2        03   1           7        5
3        05   1         10        0.7
3        08   1         -9       -5.8

最佳答案

地狱小子 查看完整内容

*间隔的天数; %let interval=2; data a; input code day event x; datalines; 1 02 0 1.9 1 03 0 3.3 1 04 1 -4 1 05 1 18 2 01 0 6 2 02 0 4 2 03 1 7 ; run; proc sql; create table result as select code,day,event,x, (select sum(x) from a ...
二维码

扫码加我 拉你入群

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

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

全部回复
2009-8-21 23:39:42
*间隔的天数;
%let interval=2;
data a;
input code day event x;
datalines;
1         02        0       1.9
1         03        0       3.3
1         04        1       -4
1         05        1       18
2         01        0        6
2         02        0       4
2         03        1        7
;
run;
proc sql;
create table result as
select code,day,event,x,
(select sum(x)
  from a t2
  where t2.code=t1.code and t2.day<t1.day and t2.day>=t1.day-&interval)/&interval
as mean_&interval
from a t1
where event=1
;
quit;
二维码

扫码加我 拉你入群

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

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

2009-8-21 23:50:36
使用函数lag lag2
二维码

扫码加我 拉你入群

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

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

2009-8-22 00:05:44
losttemple 发表于 2009-8-21 23:50
使用函数lag lag2
这是有钱人~

data a;
input code   day$    event     x@@;
x1=lag(x);
x2=lag2(x);
if event=1 then mean=0.5*(x1+x2);
if event=0 then delete;
drop x1 x2;
cards;
1         02        0       1.9
1         03        0       3.3
1         04        1       -4
1         05        1       18
2         01        0        6
2         02        0       4
2         03        1        7
;run;
二维码

扫码加我 拉你入群

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

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

2009-8-22 00:06:18
2# losttemple

能否说得清楚一点?
而且,我感觉lag只是函数,如何将event=1的事件点挑出来计算是首先要解决的问题。
二维码

扫码加我 拉你入群

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

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

2009-8-22 00:13:03
3# sushe1527

感谢你的回复,
但你提出的这个思路不是很到位,不通用。
比如说,我现在不是想求事件点前两个数值的平均数,而是前三十个数值,或者自己定义的任何数量的数值的平均数或者标准差呢?
能否有更加一般化的程序吗?
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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