异方差
对截面数据的回归分析,回归误差具有异方差(heteroskedasticity)是一件常见的事。对线性回归模型,异方差会使最小二乘估计量不再具有有效性,这倒不算什么大事,毕竟它没有破坏估计量的一致性。异方差带来的真正麻烦在于它会使传统的统计检验失效:在异方差存在的情况下,计算估计量协方差矩阵的传统方法是错误的。
处理异方差带来的不利影响,主流的方法是换一种正确的计算估计量协方差矩阵的方法,得到的协方差矩阵及相应的标准误被称为异方差一致(heteroskedasticity consistent)的协方差矩阵和标准误,异方差一致的标准误也常被称为稳健的(robust)标准误。注意,这里“异方差一致”的含义是,无论模型误差有没有异方差问题,估计的结果都对。
处理异方差还有一种方法是利用加权最小二乘法,由于其需要设置权重对数据进行加权,而权重又很难先验地知道怎么设才合理,所以,这种处理方法在现时的应用中几乎已经绝迹了,因此,我不打算再介绍它。
异方差一致的检验
利用异方差一致的协方差矩阵进的统计检验被称为异方差一致的检验,进行这种检验需要用到ls命令的可选参数cov。告诉EViews使用异方差一致的协方差矩阵,只需令cov等于white。这个white非“白色”之意,而是指已故计量经济学家Halbert White,他对异方差一致的检验做了卓越的贡献。下面是一个实例:
equation eq3.ls(cov=white) y c x1 x2 x3
设置cov=white,等价于在估计模型的对话框里选Options,然后把Covariance method设为Huber-White。上面的代码执行的结果如下:

和eq1对比一下,你会发现加了cov=white后,EViews报告的结果多了红线部分的内容。上方的红线提示使用了异方差一致的协方差矩阵,下方的红线报告了检验联合显著性的Wald F统计量及相应的p值。Wald F统计量是基于异方差一致的协方差矩阵计算得到的,而报告的F统计量用的仍是传统的计算方法,其在异方差存在时是不可用的。对eq1中已有的内容,加了cov=white后,只有红框内的内容可能会出现变化,因为它们都与估计量的协方差矩阵有关,协方差矩阵换了算法,有变化很正常。其他内容由于与估计量的协方差矩阵无关,所以,加了cov=white也不会有任何变化。
估计完模型后,再利用wald命令,就可以愉快地进行各种异方差一致的检验了。
异方差检验
无论回归误差有没有异方差,使用异方差一致的检验总是不会错的。从这个意义上讲,检验异方差存不存在,即做所谓的异方差检验,其实意义不大。如果你非要做异方差检验,看看使用异方差一致的协方差矩阵是否必要,EViews也是OK的。
EViews可以做好几种异方差检验,但是,如果你是用截面数据建模,我推荐的只有一个:White检验,这是应用最多的异方差检验。估计完模型后,利用white命令就能进行异方差检验:
eq1.white(c) 'c的含义我就不展开解释了,这是标准用法,记下就行
对应的鼠标模式是在equation对象窗口左上选View/Residual Diagnostics/Heteroskedasticity Tests,然后Test type选white,然后确定。上面检验的结果如下:

EViews会报告三个检验统计量的数值、对应的分布和p值。用这三个检验判断存不存在异方差,一般情况下结论会是相同的,如果出现不一致的情形,你可以只看第二个统计量:Obs*R-squared,这是White的原始论文中构造的统计量。
命令复习
(.)ls(cov=white):实施最小二乘估计并使用异方差一致的协方差矩阵.white(c):实施White检验
[注] ( . )命令表示命令可单独使用,也可跟在对象后使用;.命令表示命令只能跟在对象后使用。
练习
- 对[回归模型]一讲练习中的模型,检验存不存在异方差问题。对每个参数的显著性,异方差一致的t检验结果与传统的t检验结果是否相同?
数据导入
工欲善其事,必先导入数据。
Workfile
EViews的workfile是EViews中唯一能被直接分析的数据文件类型,文件名后缀为wf1。EViews从第12版起引入了全新格式的workfile,以wf2作为文件名后缀。这种新格式基于开放的JSON标准,易于阅读,并且可以由外部应用程序打开、编辑、创建。但是,目前应用中大部分的workfile还是wf1格式的。如果你要分析的数据存储在workfile(即后缀为wf1或wf2的文件)中,双击文件就能把数据导入EViews。
导入其他类型的数据文件
很多时候,我们拿到的第一手数据,往往存储在其他类型的文件中,如Excel的xlsx或xls文件,因此,在分析开始之前,我们需要把数据转存到workfile中。
EViews支持直接导入多种其他类型的数据文件,文件导入后数据会自动转存入一个workfile中。要导入一个其他类型的数据文件,可以在主菜单选择File/Open/Foreign Data as Workfile。此时,点击弹出窗口的All files,就能看到能被EViews直接导入的数据文件类型,如下图所示:

可以看到,最常见的xlsx和xls文件能被EViews直接导入,Stata、SAS、SPSS等的数据文件也能被EViews直接导入。
当然,更简单的导入方式是直接把数据文件拖拽到EViews的工作区域。注意,数据文件最好不要用中文命名,数据存放的目录及父级目录最好也不要用中文命名,否则导入文件时可能会报错。根据我的经验,多个版本的EViews都存在这个bug。
数据验证
由于不同类型的数据文件的数据结构存在差异,导入一个非workfile的数据文件,EViews会弹出对话框让你帮它理解数据的结构,然后数据才能转存到workfile文件中。姑且把这称为一个“数据验证”过程。一般来说,只要文件中数据的存储方式是“正常”的,验证就可以选finish直接跳过。通常,计量或统计分析软件的数据文件(如Stata的dta文件)往往是”正常“的,而其他类型的数据文件在导入时一般都要进行数据验证。
现实中,我们拿到的源数据文件多为Excel文件,要让数据结构”正常“,只需满足以下条件:
- 第一行为英文字符的变量名,每个变量名下是相应的数据
- 如果数据存在缺失,相应位置的单元格应保持空白
- 如果数据是时间序列,最好单独设一个变量用于指示时间,否则,EViews会把数据按编号1、2、3…从上到下进行时间排序
注意,上面最后一点意味着截面数据导入EViews也会自带“时间次序”,所以,对截面数据进行时间序列分析的操作,如对变量差分,在EViews中也是可以做的,尽管这毫无意义。从这可以看出,EViews是不严格区分截面数据和时间序列数据的,这与Stata不同。

上图展示了数据文件Demo.xlsx的前六行(本教程使用的示例数据文件,如非特别说明,都来自EViews安装目录下的Example Files\EV13 Manual Data),容易看出,这是一个“正常”的数据文件。其中,OBS是指示时间的变量。
导入Excel文件有两点需要注意:一、Excel文件里的变量名不要使用中文;二、在EViews中,变量名不区分英文字母的大小写,所有导入的变量名中的大写字母都会被改为小写字母,因此,Excel文件里的变量名在设置时应考虑EViews的这一特性。
时间表达方式
在上面的例子中,变量OBS用1952:1指示1952年的第一季度,类似地,1952:2指示1952年的第二季度。EViews能识别这种时间表达方式,也能识别其他类型的时间表达方式。当你不清楚Excel中一个指示时间的变量能不能被EViews识别出来时,数据导入的验证过程最好不要直接跳过。
从Excel文件导入的每个变量,其数据类型会被归为以下三种之一:Date型、Number型(即数值型)、Character型(即字符串型)。指示时间的变量在EViews中应属于Date型,所以,你需要在验证过程的step 3,检查文件中指示时间的变量的Data type是否为Date,只有“是”,才表明EViews做了正确的识别。以上面的Demo.xlsx为例:

EViews能识别的时间表达方式在EViews里都会被转换为EViews的标准形式。例如,Demo.xlsx中的1952:1、1952:2在EViews中会被转换为1952Q1、1952Q2。EViews对年、季、月、日的标准表达方式为:
- 年:2008、2009、…
- 季:2008Q1、2008Q2、2008Q3、2008Q4、2009Q1、…
- 月:2008M01、2008M02、…、2008M12、2009M01、…
- 日:1/30/2008、1/31/2008、2/01/2008、…
如果Excel文件中指示时间的变量已是EViews的标准形式,数据验证一般就可以跳过了。
Workfile与源数据
数据验证结束后,EViews还会弹出一个对话框:

如果选“是”,EViews会把workfile和源数据文件做一个连接,如果源数据文件中的数据有变化,在workfile里可以直接刷新获得更新的数据。如果选“否”,源数据文件中的数据转存入workfile后,workfile就作为一个独立的实体存在了,和源数据不再有关系。选“是”还是选“否”,需要根据自己面临的实际状况而定。像我,分析的数据基本上没有频繁更新的情况,所以我一般会选“否”。
做完选择后,数据就导入到workfile里了。为了指示数据是否有连接到源数据文件,EViews用颜色进行了区分,如下图所示:

如果Demo.xlsx导入EViews的最后一步选“是”,导入的变量的小图标会呈现粉色(左侧的状态)。如果选“否”,则图标会呈现黄色(右侧的状态)。
保存数据
当数据完全导入EViews后,在工作区域内就会显示下图这样的workfile窗口,此时,记得先点窗口上方的Save按钮把workfile存下来,以后的分析使用存好的wf1或wf2文件就可以了。考虑向前兼容的问题,目前,我建议优先把数据存为wf1格式。存数据的时候,EViews可能会让你选择是以双精度(默认)方式,还是以单精度方式存数据,以及要不要使用存储压缩技术(默认不使用;用的话EViews 5之前的版本不兼容这种压缩后的数据),如果你分析的数据不是特别大的话,用默认设置即可。

不知道你有没有注意到,Demo.xlsx里只有五个变量,但是上图里多了个c和resid,怎么回事?事实上,c是用来存储模型参数的估计值的(c即coefficient之意),resid是用来存储模型的残差的(resid即residual之意)。每当你估计完一个模型,参数估计值和残差就会被存入c和resid。它们是EViews里永恒的存在,你既不能删除它们,也不能为它们改名。
练习
- 将Demo.xlsx导入EViews,并把workfile命名为demo.wf1存入D盘的myproj文件夹。
- 将Stata数据文件401K.dta导入EViews,并把workfile命名为401k.wf1存入D盘的myproj文件夹。
印象EViews
EViews的全称是Econometric Views,是当前最流行的用于计量经济分析的两个商业软件之一,另一位是Stata。与其他计量经济分析软件相比,EViews更专注于开发与时间序列分析相关的功能,因此,如果你要分析的数据是时间序列,并且不想编程的话,EViews是一个不错的选择。作为一个商业软件,EViews也提供了大量分析其他类型数据的模块,所以,即使你要分析的数据不是时间序列,用EViews进行常规的分析也不会存在任何困难。
在Win11中打开EViews 13,界面如下图所示:

你可能会发现你的EViews的颜色与上图的不一样,你可以在主菜单选择Options/General Options/Environment/Appearance,然后在Basic Theme下选XP Theme Derived,就能把EViews界面设定为图中的样式。当然,你也可以选择或自定义自己喜欢的样式。以下是对EViews界面各个部分的简要说明:
[标题栏]
:”我就是我,不一样的烟火。“ EViews从第13版开始,使用了红色的logo,之前都是蓝色,这是因为在2022年,IHS Markit(EViews的所有者)被S&P Global收购了,新老板来了,总得做点什么…吧。
[主菜单] 可以实现多种功能的下拉菜单。
[命令窗口] 用于输入并执行EViews内置的或自定义的各种命令。点击Capture,命令窗口会切换到捕获窗口。捕获窗口不能输入任何内容,它的功能是以代码的方式记录EViews中用鼠标完成的操作。用鼠标拖拽,命令窗口和捕获窗口可以分离开,也可以改变它们在界面中的位置。
[命令浏览器] 一个快速检索EViews内置命令的地方,点击检索到的命令会跳转到EViews官网显示命令的用法。
[工作区域] 深色的部分是进行数据分析的工作区域,数据及数据分析的结果(图、表、模型等)都在此显示。
[状态条] 显示各种相关的状态信息。例如,进行最大似然估计时,状态栏会显示数值最优化过程的迭代次数等信息。
[工作目录] 当前EViews默认的打开文件、存储文件的目录,双击此栏可以对工作目录进行设置。
[数据库状态] 显示当前选中的数据库(database)。双击DB栏的效果等价于在主菜单选择File/Open/Database。
[工作文件状态] 显示当前选中的工作文件(workfile)。双击WF栏的效果等价于在主菜单选择File/Open/EViews Workfile。
练习
- 在D盘建立名为myproj的文件夹,并把EViews的工作目录切换到该文件夹。
ARIMA模型
ARIMA(Autoregressive Integrated Moving Average)模型是ARMA模型的一个扩展,对单位根时间序列进行预测,选它就对了。利用滞后算子\(L \),ARIMA(p,d,q)模型可以写为:$$B_p(L)[(1-L)^d y_t – \mu]= R_q(L)e_t $$ $$B_p(L) = 1 – \beta_1 L – \cdots – \beta_p L^p$$ $$R_q(L) = 1 + \gamma_1 L + \cdots + \gamma_q L^q$$其中,误差\(e_t\)是一个零期望的白噪声。可以看出,ARIMA(p,d,q)模型的含义就是将序列差分d次后,数据会服从一个平稳的ARMA(p,q)模型。
在前面你已经学过如何用ARMA模型预测demo.wf1中的gdp的对数差分dlgdp,事实上,gdp的对数是一条单位根序列,所以,你看到的实际上就是d等于1的ARIMA模型。
从建模的角度看,使用ARIMA模型和使用ARMA模型几乎无差别。你要对一条单位根时间序列进行预测,无非就是先用单位根检验(见[分析预备]一讲)确定d是多少(对经济、金融时间序列,一般d最大就是1),然后再使用ARMA模型。尽管概念上容易理解,在EViews的使用上一定要注意,请看下面的例子:
series dlgdp = dlog(gdp)
equation eq1.ls(arma=cls,cov=white) dlgdp c ar(1 to 2) ma(1)
series lgdp = log(gdp)
equation eq2.ls(arma=cls,cov=white) d(lgdp) c ar(1 to 2) ma(1)
前两行代码你在前面已经见过,它对平稳的dlgdp建立了一个ARMA(2,1)模型。后两行代码从建模的角度看,与前两行代码是完全等价的。但是但是,eq1是无法被用来预测lgdp的,它只能被用来预测dlgdp,而eq2既可以被用来预测lgdp,也可以被用来预测dlgdp,点击eq2窗口上的Forecast按钮,你会发现你可以选择预测lgdp,也可以选择预测d(lgdp),即lgdp的差分:

事实上,EViews能够理解eq2是一个ARIMA(2,1,1)模型,但是只会把eq1当作一个ARMA(2,1)模型。
估计完ARIMA模型后,仍是使用forecast命令来实施动态预测。EViews默认预测的是原始的序列,如果要预测差分后的序列,需加上可选参数d,请看下面的例子:
pagestruct(start=1952q1,end=1997q4) '扩充Range
smpl 1997q1 1997q4 '设定要预测的样本期
eq2.forecast(f=na,g) lgdpf '对lgdp实施动态预测
eq2.forecast(d,f=na,g) dlgdpf '对lgdp的差分实施动态预测
进行静态预测也是类似的操作,在这里我不再赘述。但是请注意,上面已经讲过静态预测主要是用来计算预测精度指标的。无论是对原始序列进行静态预测,还是对差分后的序列进行静态预测,对根均方误差和平均绝对误差这两个指标,算出来的数值都是相同的。但是,对平均绝对百分比误差这个指标,两种情况下算出来的值完全不同,哪一个合理?基于平稳序列的静态预测算出来的值合理。所以,请记住这一条:静态预测和平稳序列更配哦。
命令复习
.forecast(d):对差分后的序列实施动态预测.fit(d):对差分后的序列实施静态预测
[注] ( . )命令表示命令可单独使用,也可跟在对象后使用;.命令表示命令只能跟在对象后使用。
练习
- 对demo.wf1中的变量m1,建立并估计一个ARIMA(p,1,q)模型。基于估计的模型,分别对m1和m1的差分进行静态预测(自行设定要预测的样本期),验证我说的:两种情况下,根均方误差和平均绝对误差的数值相同,但平均绝对百分比误差的数值不同。
面板数据模型
在EViews中,ls命令也可以用来估计面板数据模型。但是请注意,它仅能估计类似下面这样的静态面板数据模型:$$y_{it} = \alpha + \beta x_{it} + \mu_i + u_{it}$$$$(i=1,…,N; t=1,…,T)$$对类似下面这样加入了因变量滞后项的动态面板数据模型:$$y_{it} = \alpha + \gamma y_{i,t-1} + \beta x_{it} + \mu_i + u_{it}$$实施估计需要用到其他命令。
另一个需要注意的点是,我在这里讲的面板数据指的是传统的短面板数据,即大\(N\)小\(T\)(截面维度远大于时间维度)的面板数据。对小\(N\)大\(T\)的长面板数据,在EViews中用pool workfile和pool对象来分析会更方便一些。
导入面板数据
在[数据导入]一讲你已看到如何把时间序列数据或截面数据从Excel文件导入EViews。对于面板数据,在Excel中应让其以堆叠方式存储,这样就能很方便地将其导入EViews了。堆叠方式是这样婶儿的:

在这个例子中,year是指示时间的变量,fcode是指示截面单位的变量(可以是数字也可以是字符串),其他变量根据这两个变量来确定对应的数值。对于面板数据,指示时间的变量和指示截面单位的变量是必不可少的。例子中,数据是先按fcode排序再按year排序的,但这无所谓,先按year排序再按fcode排序也行,不影响导入。
如果Excel中的面板数据是像上面的形式堆叠存储的,导入EViews时的验证过程就可以选finish直接跳过,EViews一般都能自动识别出当前的数据为面板数据。数据导入workfile后,你会在workfile窗口的Range部分看到类似下图的信息:

Range后的乘号表明EViews已经知道当前的workfile存的是面板数据了。这个例子显示数据的时间维度是从1987年到1989年,截面单位有157个,每一个变量不考虑数据缺失的话应有471个观测值。
注意,workfile里有指示时间的变量和指示截面单位的变量,不代表EViews就会自动视其存的是面板数据。EViews安装目录下的Example Files\EV13 Manual Data\Chapter 03 – Workfile Basics\jtrain.wf1就是一个例子。此时,你可以通过pagestruct命令来告诉EViews:“Hey dude,我用的是面板数据”。pagestruct之后先跟上指示截面单位的变量,再用函数@date套上指示时间的变量就行了。以jtrain.wf1为例:
pagestruct fcode @date(year)
你也可以通过workfile窗口上的Proc按钮,选Structure/Resize Current Page,然后把Workfile structure type选为Dated Panel,再手动设置指示截面单位的变量和指示时间的变量。
固定效应和随机效应
当workfile被正确地设为面板数据后,就可以估计相关的面板数据模型了。固定效应模型和随机效应模型是两个经典的包含个体异质性或时间异质性的面板数据模型。要估计静态的固定效应模型或随机效应模型,需要用到ls的可选参数cx或per。令cx等于f,模型会包含个体固定效应;令cx等于r,模型会包含个体随机效应;令per等于f,模型会包含时间固定效应;令per等于r,模型会包含时间随机效应。以jtrain.wf1为例:
equation eq1.ls(cx=f) lscrap c d88 d89 grant grant_1 '估计个体固定效应模型
报告的结果和之前使用ls命令的情形差别不大,我就不介绍了。
对短面板数据,我们还常会令ls命令的可选参数cov等于perwhite,这会让EViews使用稳健的标准误,截面个体误差存在任意形式的异方差和自相关都不会影响统计推断。估计完模型后,和之前一样,仍可以使用Wald命令进行各种检验。
鼠标模式下,估计模型的对话框里会有Panel Options和Options(如下图红框所示),在里面进行相应的设置也能实现上述代码的功能。

固定效应vs随机效应
如果随机效应模型的估计量是一致的,那么,固定效应模型的估计量也是一致的,但是,固定效应模型的估计量是一致的情况下,随机效应模型的估计量有可能不一致。从这个意义上讲,固定效应模型更安全。事实上,使用随机效应模型只是为了追求更有效(即方差更小)的估计量,但是,如果估计量的一致性不能保证,一切都是白努力。所以,在实际应用中,固定效应模型用得更多。
如果你想要尝试使用随机效应模型,一个必须做的检验是Hausman检验。这个检验的原假设是随机效应设定正确。在EViews中,你需要先估计随机效应模型,然后才能做这个检验。Hausman检验可以通过ranhaus命令实现,以下是一个示例:
eq1.ls(cx=r,per=r) lscrap c grant
eq1.ranhaus
这个例子估计了一个同时含有个体随机效应和时间随机效应的模型,检验的主要结果如下所示:

其中,Cross-section random检验个体随机效应设定正确,Period random检验时间随机效应设定正确,Cross-section and period random检验两种随机效应设定都正确。三列数值依次是卡方统计量的值、对应卡方分布的自由度和检验的p值。只有在Hausman检验不拒绝原假设的情况下,使用随机效应模型可能才是合理的。
注意,在上面的代码中,我没有加cov=perwhite,如果有这个设置,EViews会显示下面红框中的话,意思是使用稳健的标准误不能保证Hausman检验仍是正确的。这是因为原始的Hausman检验假设模型误差没有自相关,在有自相关的情形下,使用稳健的标准误进行t检验、Wald检验是没有问题的,但是,进行Hausman检验有没有问题就不知道了。作为一个搞计量的,我的直觉是,有问题的可能性比较大。

实施Hausman检验的鼠标模式是在估计完模型后,在equation对象窗口左上选View,然后选Fixed/Random Effects Testing/Correlated Random Effects – Hausman Test。
命令复习
pagestruct:声明workfile为面板数据ls(cx=f,per=f):估计静态固定效应模型ls(cx=r,per=r):估计静态随机效应模型.ranhaus:实施Hausman检验
[注] ( . )命令表示命令可单独使用,也可跟在对象后使用;.命令表示命令只能跟在对象后使用。
练习
- 基于jtrain.wf1,重复上面的一系列操作。
鼠标vs键盘
利用EViews分析数据,存在两种方式,我称之为鼠标模式和键盘模式。简言之,鼠标模式就是以点鼠标为主的操作方式,键盘模式就是以敲键盘为主的操作方式。
假设你要打开[数据导入]练习中生成的demo.wf1,你可以进入文件夹双击它,或用鼠标选主菜单的File/Open/EViews Workfile。这就属于鼠标模式。要使用键盘模式打开demo.wf1,可以在命令窗口输入以下代码然后回车:
wfopen "d:\myproj\demo.wf1"
在这行代码中,wfopen是用于打开workfile的命令。键盘模式主要是通过代码来组织分析的整个流程。在EViews中,能用鼠标实现的分析操作几乎都能用代码实现。
优势vs劣势
在EViews里,由于workfile是一种广义的数据文件,不但能存储被分析的数据,还能存储分析得到的结果:模型、图、表等。因此,使用鼠标模式有一定优势:鼠标操作的结果都能保存在同一个文件中。这也是大量EViews教程都在教点鼠标的原因。但是,当分析过程的复杂度变得越来越高时(比如要不断地尝试设定和估计不同的模型),点鼠标的成本就会越来越大。因此,鼠标模式可能更适合轻量级的数据分析。
与鼠标模式相比,键盘模式的优势在于其可以方便地管理任何复杂程度的分析流程。而且,在合作研究中,使用键盘模式也更有利于合作者之间的沟通与交流。当然,使用键盘模式也有其劣势,就是你需要花时间学习EViews的各种命令和相应语法,学习曲线相对陡峭。在本教程,我将主要介绍键盘模式,希望能帮你更快地学会键盘模式的使用。
键盘模式vs编程
注意,键盘模式不等于编程。EViews提供了大量封装好的能实现各种功能的命令,所以,在数据分析中,为了一个特定的目标,比如估计某种模型或进行某种统计检验,你只需要掌握应该用什么命令就可以了。
想要实现某种功能,但不知道命令是什么怎么用,点算?一、你可以查阅本教程里相关的内容(如果有的话);二、请移步主菜单的Help/PDF Docs;三、如果你会用鼠标模式实现相应功能,可以在捕获窗口里查看对应的实现代码;四、利用搜索引擎或咨询可能知道的人。
EViews有自己的编程语言,当某些功能无法通过已有的命令实现时,你才需要考虑编程。但是,如果你需要靠编程实现某一功能,且它会消耗你整个数据分析过程中绝大部分的时间,我不建议你再使用EViews,你可以考虑移步R或Python,这是因为我们使用EViews本身就是图个方便,要进行大量编程为什么不选一个更流行、功能更强大的工具呢?而且,EViews的编程语言,坦白讲,真不如R或Python好学。
program文件
在上面的例子里,打开demo.wf1是通过命令窗口实现的,但事实上,在命令窗口里运行代码并不方便,这是因为在命令窗口里,运行代码需要按回车键,但回车只能执行鼠标光标所在行的代码。试想你有30行代码,你要敲30次回车,有考虑过Enter的感受吗?
那怎样才是正确打开键盘模式的方式呢?你需要选主菜单的File/New/Program创建一个program文件,这种文件的后缀名为prg。prg文件是EViews存放自编程序代码的文件,如果你要实现某种自定义功能,你需要先把相应的程序代码写入prg文件,然后再通过命令run调用prg文件。
当然,这里教你用prg文件的主要目的不是为了编程,而是为了组织和管理数据分析流程。在你的prg文件中,每一行代码一般都能独立地实现某种功能,这与编程不一样,在编程的情境下可能好几行代码才能实现一种自定义的功能。所以,键盘模式下的prg文件就是一个剧本,你就是编剧和导演,EViews就是演员,你写下的每一行代码都在告诉EViews应该做什么。
创建一个prg文件当然也可以通过命令实现,我们可以利用program命令。在命令窗口执行以下代码,工作区域就会新建一个名为myprg1的prg文件。
program myprg1
有了prg文件,你就可以写代码了。在prg文件窗口的右上角,点击Wrap+/-可以打开和关闭word wrap功能(这一功能指一行代码宽度超过prg文件窗口宽度时会自动换行),点击LineNum+/-会显示行号(我个人喜欢带行号的环境)。如果代码比较多,prg文件窗口右键选Go to line或Ctrl+G,可以输入行号直接进行跳转。
把prg文件保存到硬盘只需点击prg文件窗口上的Save按钮就行,点击后prg文件会直接存入EViews的工作目录。如果你想把prg文件存到其他地方,可以点击SaveAs按钮。
注释
在prg文件中我们能非常方便地进行代码注释。文件中的任何一行,只要出现单引号,就表示注释开始,单引号及其后的内容,EViews都不会把它们当作可执行的代码。为了突出注释与可执行代码的区别,EViews在prg文件中会以绿色显示注释部分的内容。使用键盘模式,注释是很重要的一环,记得常常注释哟。
代码执行
在分析数据的过程中,我们常常需要阶段性地执行部分代码,看看结果再进行下一步的分析。在prg文件中,你如果想要执行部分代码,只需用鼠标选择相应代码,然后右键选Run Selected或直接Ctrl+Enter(EViews 13前的版本没有这个快捷键)。
注意,prg文件窗口上方第一个按钮选项是Run,如果点击它会执行prg文件里所有的代码。在文件夹中双击一个保存好的prg文件等价于先打开文件、紧接着点击Run。如果你只想打开prg文件而不执行代码,可以直接把prg文件拖拽到EViews的工作区域。
接下来我们看个实例,利用prg文件执行以下操作:打开demo.wf1、画出变量gdp的时间序列图、然后在工作区域把图显示出来,相应的代码为:
wfopen "d:\myproj\demo.wf1" '打开workfile
graph g1.line gdp '创建一个图对象并做时间序列图
show g1 '秀图
以上操作的演示见下面的动图:

数据分析的结果(例如上面的时间序列图等)都会临时存在workfile里,当关闭workfile,EViews会问你要不要保存这些新东西,我的建议是:never。由于prg文件里有实现分析过程的所有代码,下次打开workfile再分析时,之前的分析结果完全可以由代码重现。所以,拒绝EViews,你就能保持数据的准确性,不用担心在分析的过程中不小心修改了数据而不自知。
命令复习
wfopen:打开workfileprogram:创建prg文件
练习
- 利用命令创建一个prg文件,然后在prg文件里输入代码打开[数据导入]练习中生成的401k.wf1。

