楼主: godtears
5216 30

[原创博文] 如何运用SAS对下列数据进行处理 [推广有奖]

  • 1关注
  • 3粉丝

贵宾

已卖:29份资源

博士生

96%

还不是VIP/贵宾

-

威望
0
论坛币
314 个
通用积分
126.7321
学术水平
3 点
热心指数
3 点
信用等级
3 点
经验
5119 点
帖子
130
精华
0
在线时间
613 小时
注册时间
2005-3-3
最后登录
2025-12-3

楼主
godtears 发表于 2009-8-21 23:39:41 |AI写论文
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 ...
关键词:Event SAS编程 vent Even code 如何

本帖被以下文库推荐

沙发
地狱小子 发表于 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;

藤椅
losttemple 发表于 2009-8-21 23:50:36
使用函数lag lag2

板凳
sushe1527 发表于 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;

报纸
godtears 发表于 2009-8-22 00:06:18
2# losttemple

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

地板
godtears 发表于 2009-8-22 00:13:03
3# sushe1527

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

7
godtears 发表于 2009-8-22 00:35:55
2# losttemple
上面这个求贴,其实是事件研究的一个简化:
研究上市公司公告的信息含量,
一家公司可能一年内发布不止一次公告,但也有可能一家公司一年内一次公告都没有.
我现在就是要解决在一个公告前后若干天,收益率的变化情况。
比如说配股事件出来前后5天累计收益是多少?
或者增发事件出来前后10天平均收益是多少?前后30天收益标准差是多少?
我期待的是一个通用的程序,
谢谢各位达人啊!

8
地狱小子 发表于 2009-8-22 11:01:03
修改
.....

9
godtears 发表于 2009-8-22 11:36:22
8# 地狱小子
哈,对我启发很大,谢谢!
有一个小疑问,假如我想求的某段区间的标准差,而不是平均数,程序要如何修改?

10
ddd1000 发表于 2009-8-22 11:39:00
Hope answer your question and get the rewards.
A general answer:

%let n=2;
data tem;
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 sort data=tem;


data tem;

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 05:02