第二十六章程序设计 EViews编程的特征允许用户在程序中创建和存储命令,程序能 自动执行每个命令,或生成研究项目的结果。例如,用户可以编写 个分析某个工业数据的程序,然后便可以用该程序分析其他工业的数 据。用户也可以创建一个程序,通过对最后结果的计算和图形表格的 表示结构来把用户从创建工作文件和读取原始数据中解脱出来。如果 你有过计算机编程的经验,那么你将发现 Eviews编程语言是十分熟悉 的。 Eviews程序设计语言的主要特性是宏替换语言( macro substitution language)。它允许用户通过组合几个包含部分对象名的 变量来创建一个新的对象名
-1- 第二十六章 程序设计 EViews编程的特征允许用户在程序中创建和存储命令,程序能 自动执行每个命令,或生成研究项目的结果。例如,用户可以编写一 个分析某个工业数据的程序,然后便可以用该程序分析其他工业的数 据。用户也可以创建一个程序,通过对最后结果的计算和图形表格的 表示结构来把用户从创建工作文件和读取原始数据中解脱出来。如果 你有过计算机编程的经验,那么你将发现Eviews编程语言是十分熟悉 的 。 Eviews 程序设计语言的主要特性是宏替换语言 ( macro substitution language)。它允许用户通过组合几个包含部分对象名的 变量来创建一个新的对象名
§261程序设计基础 1.创建程序 程序并不是工作文件的对象,而只是包含 EViews命令的文本文件,点击 FileNew Program可以建立新的程序。用户将看见一个标准的文本编辑窗口 在那里可以输入命令行,用户也可以通过在命令行键入 program来打开窗口, program后面跟随自由选择的程序名。如 program firstprg 程序名应该遵循文件名的命名规则。 如果一个程序行长于当前的编辑窗口, Eviews会自动换行,当调整窗口 大小时,自动换行的位置将会改变,但并不改变程序行的内容。如果用户想 把一行分成几行来写,也可以键入回车,手动换行,但每行的最后一个字符 应用下划线“”来作为行与行之间的连接符。例如,以下三行: equation eq l.s yXc ar(1)ar(2) 就等价于 equationeql lsy x c art(1)a(2)
-2- §26.1 程序设计基础 1.创建程序 程序并不是工作文件的对象,而只是包含EViews命令的文本文件,点击 File\New\Program 可以建立新的程序。用户将看见一个标准的文本编辑窗口, 在那里可以输入命令行,用户也可以通过在命令行键入program 来打开窗口, program后面跟随自由选择的程序名。如: program firstprg 程序名应该遵循文件名的命名规则。 如果一个程序行长于当前的编辑窗口,Eviews会自动换行,当调整窗口 大小时,自动换行的位置将会改变,但并不改变程序行的内容。如果用户想 把一行分成几行来写,也可以键入回车,手动换行,但每行的最后一个字符 应用下划线“_”来作为行与行之间的连接符。例如,以下三行: equation eq1.ls _ y x c _ ar(1) ar(2) 就等价于equation eq1.ls y x c ar(1) ar(2)
2.存储程序 在创建和编辑程序之后,通过点击工具栏中save或 isave as进行存储,存 储之后,程序将自动生成PRG扩展名。 3.打开程序 为了打开一个以前存储过的文件,可以点击Fie/Open/ Program,进入正确 的路径,把 Files oftype对话框中的类型改成PRG,键入相应的文件名便可 打开文件。可替代地,在命令行中,也可以键入open命令,后面跟随带有扩 展名prg的完整文件名。在默认情况下, EViews将在默认的路径下寻找程序, 如果需要,将包括文件的全路径,如: open mysp500 prg open c: my workleviewslmyhouse prg 就是在默认路径下打开mysp500prg;在 myworkleviews路径下打开 myhouse prg程序。 4.运行程序 编程序共有两种方式:一种是交互方式,即在命令窗口一行一行地输入 系列命令;另一种是程序模式,即在一个程序中输入所有的命令,并以程 序组的方式集体执行命令
-3- 2.存储程序 在创建和编辑程序之后,通过点击工具栏中save或save as 进行存储,存 储之后,程序将自动生成.PRG扩展名。 3.打开程序 为了打开一个以前存储过的文件,可以点击File/Open/Program,进入正确 的路径,把Files of TYPE对话框中的类型改成.PRG,键入相应的文件名便可 打开文件。可替代地,在命令行中,也可以键入open命令,后面跟随带有扩 展名.prg的完整文件名。在默认情况下,EViews将在默认的路径下寻找程序, 如果需要,将包括文件的全路径,如: open mysp500.prg open c:\my work\eviews\myhouse.prg 就是在默认路径下打开mysp500.prg;在\mywork\eviews\路径下打开 myhouse.prg程序。 4.运行程序 编程序共有两种方式:一种是交互方式,即在命令窗口一行一行地输入 一系列命令;另一种是程序模式,即在一个程序中输入所有的命令,并以程 序组的方式集体执行命令
Run program 运行程序最简单的方式是点击 Program name or path 程序窗口中的Run按钮,打开Run myptog 对话框,并输入程序的名字和参数。 另外,在对话框中还可以设置终止 Program arguments(0‰1…. 命令前允许出现的最大错误数目, 和在 quiet与 verbose模式之间进行选 择,在 verbose模式下 EViews创建 Execution mode 和删除对象时不断地更新工作文件 Verbose [slow) update screen/status line Cancel 窗口。而quit模式隐蔽这些更新, C Quiet(fast)no screen/status line updates 以减少花费在屏幕显示上的时间 Maximum errors before halting Make this the default execution mode 在默认的情况下,当 EViews 遇到错误时它将终止运行程序, 并且显示出错信息,如果在 Maximum errors before halting域中输入最大错误数, EViews将在达到该值时 才终止程序。如果发生了严重的错误,程序也将终止,尽管还未达到错误最 大值。 另外一种运行程序的方式是输入run命令,后面跟随程序文件的名称。如 run mysp500 run c: \eviews myprog
-4- 运行程序最简单的方式是点击 程序窗口中的Run按钮,打开Run 对话框,并输入程序的名字和参数。 另外,在对话框中还可以设置终止 命令前允许出现的最大错误数目, 和在quiet与verbose模式之间进行选 择,在verbose模式下,EViews创建 和删除对象时不断地更新工作文件 窗口。而quiet模式隐蔽这些更新, 以减少花费在屏幕显示上的时间。 在默认的情况下,当EViews 遇到错误时它将终止运行程序, 并且显示出错信息,如果在 Maximum errors before halting域中输入最大错误数,EViews将在达到该值时 才终止程序。如果发生了严重的错误,程序也将终止,尽管还未达到错误最 大值。 另外一种运行程序的方式是输入run命令,后面跟随程序文件的名称。如 run mysp500 run c:\eviews\myprog
因为 EViews将自动加入扩展名,所以文件名后无需加入PRG。所有的上 述运行选项可以通过使用命令选项来设置。使用“ⅴ使得程序在 verbose模式 下运行,“q选项使得程序在 quiet模式下运行。如果包括数字选项, EViews 将把该数字作为终止程序前所允许出现的最大错误数。程序中需要的参数将 列在文件名后面。如: run(v, 500)mysp500 run(g) progarg argl arg2 arg3 也可以选择主菜单中的Femn来让 Eviews自动执行程序,或者在 windows中的stat菜单下选择Run并输入 Eviews后面输入文件名和变量名 5.终止程序 F1键可终止程序, Eviews将持续几分钟才能对终止命令做出反应。当程 序在运行过程中遇到sop命令、达到最大的错误数、以及当处理完一个已被 执行的文件时也可以停止程序
-5- 因为EViews将自动加入扩展名,所以文件名后无需加入.PRG。所有的上 述运行选项可以通过使用命令选项来设置。使用“ v”使得程序在verbose模式 下运行, “ q”选项使得程序在quiet模式下运行。如果包括数字选项,EViews 将把该数字作为终止程序前所允许出现的最大错误数。程序中需要的参数将 列在文件名后面。如: run(v,500)mysp500 run(q) progarg arg1 arg2 arg3 也可以选择主菜单中的File/run 来让Eviews自动执行程序,或者在 windows中的start菜单下选择Run并输入Eviews后面输入文件名和变量名。 5.终止程序 F1键可终止程序,Eviews将持续几分钟才能对终止命令做出反应。当程 序在运行过程中遇到stop命令、达到最大的错误数、以及当处理完一个已被 执行的文件时也可以停止程序
§262简单程序 最简单的程序仅仅是一个命令列表。执行程序等同于在命 令窗口一行行地输入程序命令。但程序具有在命令窗口键入命 令所不具备的优势:它可以存储命令供日后使用,可以反复执 行程序和每一次做最小限度的修改。 让我们看一个简单的例子:创建一个名为 myprog的新程序, 在命令窗口输入: program myprog 在该程序的窗口中连续键入创建工作文件的命令,在名为 proder的数据库中获取一个序列,进行一次回归,计算残差和 预测,固化预测线性图并且存储结果。程序如下:
-6- §26.2 简单程序 最简单的程序仅仅是一个命令列表。执行程序等同于在命 令窗口一行行地输入程序命令。但程序具有在命令窗口键入命 令所不具备的优势:它可以存储命令供日后使用,可以反复执 行程序和每一次做最小限度的修改。 让我们看一个简单的例子:创建一个名为myprog的新程序, 在命令窗口输入: program myprog 在该程序的窗口中连续键入创建工作文件的命令,在名为 prodemo 的数据库中获取一个序列,进行一次回归,计算残差和 预测,固化预测线性图并且存储结果。程序如下:
housing analysis workfile myhouse m 1968: 31997: 6 fetch progdemo: hsf smpl1968:51992:12 equation regl Is hsf c hsf(-1) regl. makeresid hsfres smpl1993:11997:6 regl forecast hsffit freeze(hsfplot)hsffit line save 程序的第一行是注释,用撇号“”表示。在执行程序的过程中,EVew 将忽略撇号后面的文本文字。在这个程序中,我们以一个存储过的名为 myhouse的工作文件结束,这个工作文件包含hs序列、regl方程、残差序列 hsfresz和预测序列hst、以及预测的线性图 hsfplot。我们可以点击run按钮并 填写对话框来运行该程序。 现在,假设我们要对500家股票价格指数进行相同的分析,则就要把 myhouse转成mysp500,并把对hs的所有操作改成对 socom的操作。程序如
-7- 'housing analysis workfile myhouse m 1968:3 1997:6 fetch progdemo::hsf smpl 1968:5 1992:12 equation reg1.ls hsf c hsf(-1) reg1.makeresid hsfres smpl 1993:1 1997:6 reg1.forecast hsffit freeze(hsfplot) hsffit.line save 程序的第一行是注释,用撇号“’”表示。在执行程序的过程中,EViews 将忽略撇号后面的文本文字。在这个程序中,我们以一个存储过的名为 myhouse的工作文件结束,这个工作文件包含hsf序列、reg1方程、残差序列 hsfres和预测序列hsffit、以及预测的线性图hsfplot。我们可以点击run 按钮并 填写对话框来运行该程序。 现在,假设我们要对500家股票价格指数进行相同的分析,则就要把 myhouse 转成mysp500,并把对hsf的所有操作改成对fspcom的操作。程序如 下:
s&p analysis workfile mysp500 m 1968:3 1997: 6 fetch progdemo: fspcom smpl1968:51992:12 equation regl Is fspcom c fspcom(-1) regl. makeresid fspcomres smpl 1993:119976 regl forecast fspcomfit freeze( complot) fsp comfit 1i Ine save 点击πmn按钮来执行新的分析。点击save按钮在 EViews路径上存储 myprog. prg文件。 因为这两个命令大部分是相同的,所以它看起来是许多相同的输入 却编译两个分离的程序。下面我们将介绍用一个简单的程序参数就可以 解决这个问题
-8- 's&p analysis workfile mysp500 m 1968:3 1997:6 fetch progdemo::fspcom smpl 1968:5 1992:12 equation reg1.ls fspcom c fspcom(-1) reg1.makeresid fspcomres smpl 1993:1 1997:6 reg1.forecast fspcomfit freeze(fscomplot) fspcomfit.line save 点击run 按钮来执行新的分析。点击save 按钮在EViews路径上存储 myprog.prg文件。 因为这两个命令大部分是相同的,所以它看起来是许多相同的输入 却编译两个分离的程序。下面我们将介绍用一个简单的程序参数就可以 解决这个问题
§263程序变量 当我们使用程序来编辑、运行、再运行 EViews命令时,编程语言真正 的功效是来自它对程序变量和控制语句的使用。 1.控制变量 控制变量是在程序中用来代替数据的变量。一旦控制变量被赋值,我 们就可以在程序中任意运用该数据的地方使用该控制变量。控制变量的名 称以!开始,!后面应是一个少于15个字符的合法 EViews名称,例如: I counter 尽管在使用控制变量之前必须对其赋值,但是在未涉及到它之前不需 要申请控制变量。控制变量以普通的方式进行赋值,等号左边是控制变量 的名称,等号右边是赋值表达式,如下面所举的简单例子 X=7 !12345=0 Counter=12 pi=3.14159
-9- §26.3 程序变量 当我们使用程序来编辑、运行、再运行EViews命令时,编程语言真正 的功效是来自它对程序变量和控制语句的使用。 1.控制变量 控制变量是在程序中用来代替数据的变量。一旦控制变量被赋值,我 们就可以在程序中任意运用该数据的地方使用该控制变量。控制变量的名 称以 !开始,!后面应是一个少于15个字符的合法EViews名称,例如: !x !1 !counter 尽管在使用控制变量之前必须对其赋值,但是在未涉及到它之前不需 要申请控制变量。控制变量以普通的方式进行赋值,等号左边是控制变量 的名称,等号右边是赋值表达式,如下面所举的简单例子: !x=7 !12345=0 !counter=12 !pi=3.14159
旦被赋值之后,控制变量便可用于表达式中,例如: Counter=counter+1 genr norm1/sqr(2* pi *exp(-1/2* 2 scalar stdx-x/sqr(!varx) Smpl19501+119604+!1 控制变量值存储于程序的执行期间,并且随着程序的结束也自动释放。 所以,当存储一个工作文件时,控制变量不能随之被存储,但可以通过创 建一个包含控制变量值的 EViews对象来存储控制变量值。例如 scalar stdx-=sqr(!varx) c(100)=!length sample years 1960+!z 1990
-10- 一旦被赋值之后,控制变量便可用于表达式中,例如: !counter=!counter+1 genr dnorm=1/sqr(2*!pi)*exp(-1/2*!epsilon^2) scalar stdx=x/sqr(!varx) smpl 1950:1+!i 1960:4+! i 控制变量值存储于程序的执行期间,并且随着程序的结束也自动释放。 所以,当存储一个工作文件时,控制变量不能随之被存储,但可以通过创 建一个包含控制变量值的EViews对象来存储控制变量值。例如: scalar stdx = sqr(!varx) c(100) = !length sample years 1960+!z 1990