
Eviews编程.doc
4页事件研究法 EVIEWS 编程1. 编程前须知 编程过程用 Reviews 实现,编程重点在于循环语句和 IF 语句的使用,下面 简单介绍循环语句的使用说明循环语句: (1)循环语句块由关键字 for 开始,到关键字 next 结束,配对 (2)循环语句块以关键字 for 开头的语句称为循环控制语句,该语句由 for 开始, 然后是控制变量的初始化例如:For !i=1 to 41 ~~~~~ ~~~~~ Next (3)for 循环语句的执行过程为,判断循环控制变量是否穿越终止值 (4)for 循环允许嵌套IF 语句: (1) If 语句以关键字 if 开始,end 结束例 if thenEnd(2)If 语句中 If 到 Then 之间的表达式称为 If 条件语句,只有当 If 条件语句为 真时,If 语句块才被执行@str():将控制变量的数值转化成字符串 @elem(a,b):取序列在给定时间的观测值,a 一个序列,b 指定的时间观测值,必 须是字符串的形式 Smpl %a=1 %b=100 @coefs(1) @coefs(2) Vector(41) car01 Matrix(41,3) nt01 @cnorm(J1/J2)以估计窗口长度为 90,事件窗(事后窗)为 41,公司数 220 为例,给出编 程过程及解释(一共收集了事件日前 121 天的数据,和事件日后 61 天的数据, 每个样本含有 183 个观测值) 。
先对数据进行匹配处理,通过国泰安数据库,得 到两个系列 ser01 和 ser02,分别表示单个公司的收益率和市场综合的日收益率 Ser01、ser02 共有 220*183 个数据2 估计窗 91 112 事件窗 152事件日编程过程如下: 第一步,提取系数for !i=1 to 220 // 循环语句,以 for 开头,next 结尾 %a=@str(183*(!i-1)+2) //将控制变量的数值转变成字符串变量 %b=@str(183*(!i-1)+91) //选取每个公司的估计窗口 smpl %a %b //设定样本区间 equation eq.ls ser01 c ser02 //市场模型回归,估计参数 a(!i)=@coefs(1) //提取系数的函数 b(!i)=@coefs(2) //提取市场模型的系数 next //循环结束第二步,估计异常收益率及标准差for !i=1 to 220 %a=@str(183*(!i-1)+112) %b=@str(183*(!i-1)+152) //设定事件窗口 smpl %a %b r01=ser01-(a(!i)+b(!i)*ser02) //r01 存储异常收益率,格式 41*220 sd(!i)=@stdev(r01) //存储每个公司的标准差 next //循环结束第三步,对异常收益率进行横截面平均,仅计算时间窗口的,存储在向量 ar01 中for !i=1 to 41 // count=0 //计数器 for !j=1 to 220 //嵌套循环语句 count=count+@elem(r01,@str(41*(!j-1)+!i+1)) next //嵌套循环结束 ar01(!i)=count/220 //计算平均异常收益率next //总循环结束for !i=1 to 41 car01(!i)=ar01(!i) if !i>1 then car01(!i)=ar01(!i)+car01(!i-1) //计算累计平均异常收益率 end if next第四步,计算 J1 统计量for !i=1 to 220 for !j=1 to 41 r02(41*(!i-1)+!j)=@elem(r01,@str(41*(!i-1)+!j))/sd(!i) //r02 存储标准化后 异常收益率 next next //标准化过程for !i=1 to 41 count=0 for !j=1 to 220 count=count+r02(41*(!j-1)+!i) //标准化的平均异常收益路 next ntest01(!1,1)=(@sqrt(90-4)/@sqrt(220*(90-2)))*count //J1 统计量 nextfor !i=1 to 41 ntest01(!i,2)=@cnorm(ntest01(!i,1)) //计算 P 值 if ntest01(!i,2)=0.975 then ntest01(!i,3)=1 end if next第五步,计算 J2 统计量vector(41) car01 //创建一个向量 matrix(41,3) nt01 //创建向量 scalar mml=@sqrt(90-4)/@sqrt((90-2)*220) //创建一个标量for !i=1 to 41 count=0 for !j=1 to 220 count=count+r02(41*(!j-1)+!i) next car01(!i)=count/220if !i>1 then car01(!i)=car01(!i)+car01(!i-1) end if nextfor !i=1 to 41 nt01(!i,1)=(car01(!i)/@sqrt(!i+1))*mml //计算 J2 统计量 nextfor !i=1 to 41 nt01(!i,2)=@cnorm(nt01(!i,1)) //计算 P 值 if nt01(!i,2)=0.975 then nt01(!i,3)=1 end if next。












