第五章
数据操作
第五
数据
操作
第五章 数据操作,5.1 使用表达式,Eviews 提供了强大的对表达、产生和使用序列和数据的语言支持,Eviews中可以使用表达式。5.1.1 表达式的使用 Eviews提供了广泛的运算符集和庞大的内建函数库。Eviews不仅提供了标准的数学运算和统计运算,也提供了很多能够自动处理时间序列中的先行、滞后、差分等操作的特殊函数。Eviews的表达式是由数字、序列名、函数、数学运算符、和关系运算符组成。,5.1.2 运算符 Eviews中包含的基本算术运算符分别是+、-、*、/、(幂),例如:5+6/13、32-9 参加运算的数可以写为整数形式、十进制形式和科学计数法的形式。,另外+、-还可以作为符号运算符来使用。比如:2+-2,Eviews各种运算符的优先级别为(从高到低):+(正号),-(负号)*/+-=and or 最后2列用于逻辑运算。,Eviews的表达式是从左往右计算的,也可以使用括号来改变运算的先后顺序。,5.1.3 序列表达式,Eviews的表达式还可以对样本序列的观测值进行操作,比如:,2*y+3 表示用2乘以y的每一个观测值之后加3。也可以在一个运算中使用多个序列。例:x/y+z,5.1.4 序列函数,Eviews提供的函数能够对当前样本的序列元素进行运算,一些函数是“元素函数”他们返回的是序列中每一个元素的值。有些是“整体函数”他们返回的是标量、向量和矩阵。这些函数一般在创建新序列时使用或在矩阵语言中使用。,Eviews中大多数函数前都有一个符号.例:mean 此函数可以计算一个序列的平均值。例:scalar s s=mean(x),5.1.5 序列元素,有时希望使用序列中的一个实际观测值。Eviews提供的elem函数可实现此操作,elem有两个参数,第一个参数是序列名,第二个参数是数据或观测值的标识符。例如:使用y序列中的1980:3的季度数据,则应写为:elem(y,1980:3)。非时间序列x的第323个数据:elem(x,323)。,5.1.6 逻辑表达式,使用逻辑表达式来计算真假值。逻辑表达式能作为数学表达式的一部分、样本描述的一部分或在程序中作为if判断的一部分。例如:incm5000 这个表达式允许我们选择特殊条件的观测值,incm值大于5000,则就得到真值,否则得到假值。通常,逻辑表达式中常用到比较运算符、=、=、。另外,还可以使用逻辑运算符and、or组成更复杂的逻辑表达式。例如:incm5000 and educ=2000。注意:Eviews用1表示真,用0表示假。因此,可以用逻辑值参加数学运算。例如:(inc=2000),如果inc300,得1,否则得0。另外,=既可以当赋值运算符,又可以当作比较运算符使用。现在,我们只要注意到=用于关系表达式中就表示是比较运算符。,5.1.7 先行指标、滞后指标和差分,处理序列中的先行、滞后指标是很容易的,只要在序列名后加一对小括号,括号中写上先行滞后的数字即可。滞后的数字用负号表示,先行的用正数表示。例如:income(-4)表示收入序列的四阶延迟的滞后指标。sales(2)表示sales序列的超前二阶的先行指标。括号中的数要求是整数,但写入的数也可以不是整数,这时系统会自动把它转换成整数。如果转换不了系统会发出警告。如果必须使用非整型数,最好使用round、floor、ceil函数处理一下。Eviews中有些地方,可以指定一个先行或滞后指标的分布。例如:在估计方程中可以有这样的表达式 income(-1 to-4)这里描述的是一个从1到4的滞后指标的分布。例如:sales sales(-1)sales(-2)sales(-3)sales(-4)sales(0 to-4)sales(to-4)是完全等价的。,Eviews也有几个函数可以处理差分或先取对数后作差分。D函数和DLOG函数就可以实现此功能。例如:d(income)等价于 income-income(-1)dlog(income)等价于 log(income)-log(income(-1),并且这两个函数可以提供更高阶的差分计算。例如:d(income,4)dlog(income,4)这是作四阶差分。,也可以既指定作季节差分,又指定作普通差分。例如:d(income,1,4)等价于 d(income-income(-4)dlog(income,1,4)等价于 d(log(income)-log(income(-4),如果只作季节差分,就把普通差分项设为0。例如:d(income,0,4)等价于 income-income(-4)dlog(income,0,4)等价于 log(income)-log(income(-4),5.1.8 缺失数据,在处理数据时可能会遇到一些没有值或某一时段观测值没有用,或者进行了一些非法计算(例如用一个数除以0),Eviews使用空值NA表示这些情况。,5.2 序列的操作,表达式的一个主要用途是从一个存在的序列产生一个新序列或修正已存在的序列值。另外,表达式也允许你进行复杂的数据传送,并可以保存新序列或已经存在序列对象的结果。,5.2.1 建立一个新序列 选择quick/generate series或者单击工作文件工具条上的“genr”按钮。Eviews会弹出一个窗口,你只要在上面的编辑框中写上分配表达式,并在下面编辑框中写上相应的样本空间即可。另外,你写入的表达式在计算时是针对每一个观测值的。,5.2.2 基本的赋值表达式,可以写一个序列的名字后加一个=,然后再写一个表达式。Eviews将会使用等号右边的表达式对每一个样本元素进行计算。并把相应的计算结果赋给等号左边的序列,如果有必要Eviews会创建一个新序列。例如:y=2*x+37*z 如果序列y不存在,则先建立一个序列,这时序列中的值都为空(NA),之后对于当前样本的每一个观测值,Eviews将会把通过表达式计算的结果赋给它们。如果y已经存在了,则在当前的样本空间范围内用表达式计算的结果替换,而样本空间以外的观测值不替换。如果等号右端是一个常量表达式,例如:y=3 则把样本空间中的所有观测值用常量代换。,5.2.3 使用样本,我们可以用表达式形式调整和使用已有样本的观测值,这时用“Genr”按钮。例如:在上面的对话框中写入 y=z 在下面的对话框中写入 all if z=-1。注意:建议使用Genr按钮和在尽可能多的地方使用样本表达式,因为这种方式更有效。,5.2.4 动态分配 也可以在目标序列中使用滞后的值进行动态分配。例如:一个年度工作文件,观测值是从1945-1997年,则如果在上面的编辑框中写入:y=y+y(-1)在下面的编辑框中写入:1946 1997 则Eviews将会用y序列的累加和来替换y序列。这是因为我们在移到下一个时间段时,则滞后的的那个序列的值已经包含了前几项的累加和。这就是动态分配。,5.2.5 暗示分配,通过在表达式左端的简单的表达式,你可以完成暗示分配操作。例如:log(y)=x 则按 y=exp(x)计算。通常Eviews只能处理:+-*/log()exp()sqr()d()dlog()inv()这几种运算的暗示操作。除此以外其他的运算就不行了。例如:tdist(y,3)=x,就不可以了。另外,Eviews也不能在等号左边多次出现目标序列的情况,例如:x+1/x=5就不可以。以上提到的两种情况Eviews都会出现提示信息。,5.2.6 命令窗口的方式,也可以使用命令在命令窗口中建立一个新序列,并为它们分配值。建立一个新序列,则必须使用关键字series或genr例如:series y=exp(x)genr y=exp(x)一旦序列建立起来则在使用该序列时就不用这两个关键字了。,5.3 自动序列操作,在表达式中我们也可以使用一个表达式代替序列名字的位置。不管是序列、序列对象还是组元素,不管这些名字出现在等式中还是在模型中,都可以进行这样的替换。代替序列名的表达式叫做自动序列。之所以叫自动序列,是因为如果信息有变化,数据的更新是自动进行的,而不需要我们额外写命令进行更新。所以自动序列中的数据总是新的。,5.3.1 创建自动序列,例如用图形的方式察看 年度cp序列取log后的值,这时我们可以用自动序列来实现。创建自动序列可以单击“show”按钮或选择主菜单上的“quick/show”然后键入:log(cp),Eviews会以表格打开一个序列窗口。在显示序列名字的地方就显示log(cp),则就建立了一个自动序列。我们就可以象对其他序列一样对自动序列进行任何操作。要以图形方式显示此序列只要选view/line graph 就可以了。则与操作普通序列是一样的。注意:如果序列的值发生了变化,则此自动序列会做出反应。例如改变了序列的前几项观测值,则自动序列的值也会有相应的变化。,5.3.2 在组中使用自动序列,在组中使用自动序列是非常有用的,可以象通常那样建立一个组,并在组中建立自动序列。首先选取主菜单上的bojects/new object/group,然后键入 cp、log(cp),这样就建立了一个包含两个序列的组,包含的两个序列:一个cp序列,一个是自动序列log(cp)。我们也可以在估计方程中使用自动序列。,5.3.3 处理组中的序列,这里要强调的是组中存放的是构成这个组的序列的名字或是自动序列,而不包含序列中的数据。我们可以创建一个组,选主菜单上的objects/new object/group 或者单击工作文件窗口上工具条中“show”按钮,添对话框即可。我们也可以通过命令的方式,例如:在命令窗口中键入 group macrolist gdp invest cons,就建立了一个包含 gdp invest cons 三个序列的组,同样也可以建立一个包含自动序列的组。例如:group macrolist log(gdp)d(invest)cons/price 在使用组时有几个问题需要注意:第一、一个组中只包含序列的标识符,不包含这些序列中的数据。所以如果序列中的数据发生了变化,组也会产生相应的变化。第二、如果从工作文件中删除了一个序列,则在包含这个序列的组中相应序列也会消失。如果这个组只包含这么一个被删除的序列,则组也会被删除。第三 如果被包含的序列改了名字,则在组中的这个序列的名字也会改变。,5.3.4 用自动序列进行估计,可用自动序列进行估计。如果估计一个方程时,可以用log(x)或exp(x+z)作为解释变量。Eview允许你用自动序列作为估计的因变量。如果因变量是log(y),则不必建立logy序列,直接用表达式log(y)做因变量。当预测时,EVIEWS将直接给出y 的预测值,不必再由log(y)计算出y来。关于预测的详细介绍见14章“预测”。,下面介绍一下组中序列的使用,组中序列使用方法是在组名后加一个括号,括号中写入一个整数即可,这个整数就代表你要使用的组中的第几个序列。例如:macrolist(1)表示使用macrolist组中的gdp序列。marcolist(2)表示使用macrolist组中的invest序列。我们以这种形式就可以象使用其它序列一样使用组中的序列了。例如:我们可以新建一个组 Group macrolist(1)macrolist(2)此命令等价于Group gdp invest 我们也可以把这种形式写在表达式中,例如:series y=log(macrolist(3)还有一些函数可以允许你得到组中序列的个数及每个序列的名字。得到组中序列的个数的函数是 count,得到组中每个序列的名字的函数是seriesname。例如:scalar numgroup=macrolist.count,5.4 序列生成组的操作,用来计算相关矩阵、估计VAR模型、画XY图等。建组方法:1、在EVIEWS主菜单中选object/new groups后输入序列名称或表达式。2、quick/show后输入序列名称或表达式。,5.5 标量操作,标量与序列或组不同,它没有显示窗口,它只能通过命令方式来建立。例如:scalar scalar_name=number 除了这种形式等号右边也可以是表达式或是一个特殊的函数(此函数应返回的是一个数量值)。如果想知道数量对象的值,可以使用show 命令。这时系统会在Eviews窗口底下状态行显示数量对象的值。例如:show scalar_name 另外,也可以通过双击工作文件窗口的数量对象的名字来显示数量对象的值。,返回,