《EVIEWS-程序設(shè)計》課件_第1頁
《EVIEWS-程序設(shè)計》課件_第2頁
《EVIEWS-程序設(shè)計》課件_第3頁
《EVIEWS-程序設(shè)計》課件_第4頁
《EVIEWS-程序設(shè)計》課件_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

-1-第二十四章程序設(shè)計

EViews編程的特征允許用戶在程序中創(chuàng)建和存儲命令,程序能自動執(zhí)行每個命令,或生成研究項目的結(jié)果。例如,用戶可以編寫一個分析某個工業(yè)數(shù)據(jù)的程序,然后便可以用該程序分析其他工業(yè)的數(shù)據(jù)。用戶也可以創(chuàng)建一個程序,通過對最后結(jié)果的計算和圖形表格的表示結(jié)構(gòu)來把用戶從創(chuàng)建工作文件和讀取原始數(shù)據(jù)中解脫出來。如果你有過計算機編程的經(jīng)驗,那么你將發(fā)現(xiàn)Eviews編程語言是十分熟悉的。Eviews程序設(shè)計語言的主要特性是宏替換語言(macrosubstitutionlanguage)。它允許用戶通過組合幾個包含部分對象名的變量來創(chuàng)建一個新的對象名??烧韕pt-2-§24.1程序設(shè)計基礎(chǔ)

1.創(chuàng)建程序程序并不是工作文件的對象,而只是包含EViews命令的文本文件,點擊

File\New\Program

可以建立新的程序。用戶將看見一個標準的文本編輯窗口,在那里可以輸入命令行,用戶也可以通過在命令行鍵入program來打開窗口,program后面跟隨自由選擇的程序名。如:

programfirstprg程序名應(yīng)該遵循文件名的命名規(guī)則。如果一個程序行長于當前的編輯窗口,Eviews會自動換行,當調(diào)整窗口大小時,自動換行的位置將會改變,但并不改變程序行的內(nèi)容。如果用戶想把一行分成幾行來寫,也可以鍵入回車,手動換行,但每行的最后一個字符應(yīng)用下劃線“_”來作為行與行之間的連接符。例如,以下三行:equationeq1.ls_yxc_ar(1)ar(2)就等價于equationeq1.lsyxcar(1)ar(2)??烧韕pt-3-2.存儲程序在創(chuàng)建和編輯程序之后,通過點擊工具欄中save或saveas

進行存儲,存儲之后,程序?qū)⒆詣由?PRG擴展名。3.打開程序為了打開一個以前存儲過的文件,可以點擊File/Open/Program,進入正確的路徑,把FilesofTYPE對話框中的類型改成.PRG,鍵入相應(yīng)的文件名便可打開文件??商娲?,在命令行中,也可以鍵入open命令,后面跟隨帶有擴展名.prg的完整文件名。在默認情況下,EViews將在默認的路徑下尋找程序,如果需要,將包括文件的全路徑,如:openmysp500.prgopenc:\mywork\eviews\myhouse.prg就是在默認路徑下打開mysp500.prg;在\mywork\eviews\路徑下打開myhouse.prg程序。4.運行程序編程序共有兩種方式:一種是交互方式,即在命令窗口一行一行地輸入一系列命令;另一種是程序模式,即在一個程序中輸入所有的命令,并以程序組的方式集體執(zhí)行命令??烧韕pt-4-運行程序最簡單的方式是點擊程序窗口中的Run按鈕,打開Run對話框,并輸入程序的名字和參數(shù)。另外,在對話框中還可以設(shè)置終止命令前允許出現(xiàn)的最大錯誤數(shù)目,和在quiet與verbose模式之間進行選擇,在verbose模式下,EViews創(chuàng)建和刪除對象時不斷地更新工作文件窗口。而quiet模式隱蔽這些更新,以減少花費在屏幕顯示上的時間。在默認的情況下,當EViews遇到錯誤時它將終止運行程序,并且顯示出錯信息,如果在Maximumerrorsbeforehalting域中輸入最大錯誤數(shù),EViews將在達到該值時才終止程序。如果發(fā)生了嚴重的錯誤,程序也將終止,盡管還未達到錯誤最大值。另外一種運行程序的方式是輸入run命令,后面跟隨程序文件的名稱。如runmysp500runc:\eviews\myprog可整理ppt-5-因為EViews將自動加入擴展名,所以文件名后無需加入.PRG。所有的上述運行選項可以通過使用命令選項來設(shè)置。使用“v”使得程序在verbose模式下運行,“q”選項使得程序在quiet模式下運行。如果包括數(shù)字選項,EViews將把該數(shù)字作為終止程序前所允許出現(xiàn)的最大錯誤數(shù)。程序中需要的參數(shù)將列在文件名后面。如:run(v,500)mysp500run(q)progargarg1arg2arg3也可以選擇主菜單中的File/run來讓Eviews自動執(zhí)行程序,或者在windows中的start菜單下選擇Run并輸入Eviews后面輸入文件名和變量名。5.終止程序F1鍵可終止程序,Eviews將持續(xù)幾分鐘才能對終止命令做出反應(yīng)。當程序在運行過程中遇到stop命令、達到最大的錯誤數(shù)、以及當處理完一個已被執(zhí)行的文件時也可以停止程序。

可整理ppt-6-§24.2簡單程序

最簡單的程序僅僅是一個命令列表。執(zhí)行程序等同于在命令窗口一行行地輸入程序命令。但程序具有在命令窗口鍵入命令所不具備的優(yōu)勢:它可以存儲命令供日后使用,可以反復(fù)執(zhí)行程序和每一次做最小限度的修改。讓我們看一個簡單的例子:創(chuàng)建一個名為myprog的新程序,在命令窗口輸入:programmyprog在該程序的窗口中連續(xù)鍵入創(chuàng)建工作文件的命令,在名為prodemo的數(shù)據(jù)庫中獲取一個序列,進行一次回歸,計算殘差和預(yù)測,固化預(yù)測線性圖并且存儲結(jié)果。程序如下:可整理ppt-7-

'housinganalysisworkfilemyhousem1968:31997:6fetchprogdemo::hsfsmpl1968:51992:12equationreg1.lshsfchsf(-1)reg1.makeresidhsfressmpl1993:11997:6reg1.forecasthsffitfreeze(hsfplot)hsffit.linesave程序的第一行是注釋,用撇號“’”表示。在執(zhí)行程序的過程中,EViews將忽略撇號后面的文本文字。在這個程序中,我們以一個存儲過的名為myhouse的工作文件結(jié)束,這個工作文件包含hsf序列、reg1方程、殘差序列hsfres和預(yù)測序列hsffit、以及預(yù)測的線性圖hsfplot。我們可以點擊run按鈕并填寫對話框來運行該程序?,F(xiàn)在,假設(shè)我們要對500家股票價格指數(shù)進行相同的分析,則就要把myhouse轉(zhuǎn)成mysp500,并把對hsf的所有操作改成對fspcom的操作。程序如下:可整理ppt-8-

's&panalysisworkfilemysp500m1968:31997:6fetchprogdemo::fspcomsmpl1968:51992:12equationreg1.lsfspcomcfspcom(-1)reg1.makeresidfspcomressmpl1993:11997:6reg1.forecastfspcomfitfreeze(fscomplot)fspcomfit.linesave點擊run按鈕來執(zhí)行新的分析。點擊save按鈕在EViews路徑上存儲myprog.prg文件。因為這兩個命令大部分是相同的,所以它看起來是許多相同的輸入?yún)s編譯兩個分離的程序。下面我們將介紹用一個簡單的程序參數(shù)就可以解決這個問題??烧韕pt-9-§24.3程序變量當我們使用程序來編輯、運行、再運行EViews命令時,編程語言真正的功效是來自它對程序變量和控制語句的使用。

1.控制變量

控制變量是在程序中用來代替數(shù)據(jù)的變量。一旦控制變量被賦值,我們就可以在程序中任意運用該數(shù)據(jù)的地方使用該控制變量。控制變量的名稱以

!開始,!后面應(yīng)是一個少于15個字符的合法EViews名稱,

例如:

!x!1!counter盡管在使用控制變量之前必須對其賦值,但是在未涉及到它之前不需要申請控制變量??刂谱兞恳云胀ǖ姆绞竭M行賦值,等號左邊是控制變量的名稱,等號右邊是賦值表達式,如下面所舉的簡單例子:!x=7!12345=0!counter=12!pi=3.14159

可整理ppt-10-一旦被賦值之后,控制變量便可用于表達式中,例如:!counter=!counter+1

genrdnorm=1/sqr(2*!pi)*exp(-1/2*!epsilon^2)scalarstdx=x/sqr(!varx)smpl1950:1+!i1960:4+!i控制變量值存儲于程序的執(zhí)行期間,并且隨著程序的結(jié)束也自動釋放。所以,當存儲一個工作文件時,控制變量不能隨之被存儲,但可以通過創(chuàng)建一個包含控制變量值的EViews對象來存儲控制變量值。例如:

scalarstdx=sqr(!varx)c(100)=!lengthsampleyears1960+!z1990可整理ppt-11-2.字符串變量字符串是位于雙引號之中的文本,如:“grossdoncesticproduct""3.14159"“ar(1)ar(2)ma(1)ma(2)"字符串變量的值是字符串,其名字以%開始,賦值方式與控制變量相同:等號左邊為字符串變量的名字,右邊是字符串表達式,例如:%value="valueinmillionsofu.s.dollars"%armas="ar(1)ar(2)ma(1)ma(2)"%mysample="83:196:12"%dep="hs"%pi="3.14159"一旦被賦值,字符串變量便可用于表達式中,可以建立命令、變量名稱和表格的表頭。如gnp.label%valuesmpl%mysampleequationwq1.ls%depc%dep(-1)equationeq2.ls%depc%dep(-1)%armas

可整理ppt-12-EViews有許多應(yīng)用字符串的算子和函數(shù),來看一個簡單的例子:!repeat=500%st1="drawsfromthenormal"%st2="Cauchy"%st3=@str(!repeat)+@left(%st1,16)+%st2+"distribution"在這個例子中,%st3被賦予“500drawsfromtheCauchydistribution"。注意draws之前和Cauchy之后的兩個空格也算是兩個字符。字符串變量與控制變量一樣也只存在于程序執(zhí)行期間,不能被保存在工作文件中,但可以存儲在表格單元中。用戶可以用轉(zhuǎn)變函數(shù)@val來將字符型變量轉(zhuǎn)化為數(shù)值型變量。如

%str="0.05"!level=@val(%str)將創(chuàng)建一個控制變量!level=0.05。如果字符串變量的首字符不是數(shù)值型字符,@val將返回空值,從第一個不為0的字符到最后所有的字符都將被忽略。如

%data="04/23/97"scalarday=@val(@right(%data,5))scalarmonth=@val(%data)將得到標量對象

day=23,month=4??烧韕pt-13-3.字符串操作字符和字符串變量可以用操作符“+”連接起來,例如:%st1=”Thename”%st2=”X”%st3=%st1+”is”+%st2則字符串變量%st3為:”ThenameisX”。另外,Eviews提供了一些對字符串進行操作的函數(shù):

(1)@left:返回值為一個字符串從左面起指定數(shù)目的字符。如果整個字符串的字符數(shù)比指定的數(shù)目少,則返回整個字符串。將字符串和指定的數(shù)目放在括號內(nèi)。例如:@left(“Ididnotdoit”,5)返回字符串“Idid”。

(2)@mid

:返回值為一個字符串從指定位置起從左到右指定數(shù)目的字符。例如:@mid(“IdoubtIdidit”,9,5)返回字符串“Idid”。如果省略掉返回字符的數(shù)目,或指定數(shù)目比剩余字符數(shù)目大,則返回指定位置起右端所有的字符,例如:@mid(“IdoubtIdidit”,9)返回字符串“Ididit”。

可整理ppt-14-(3)@right

:返回值為一個字符串從右端起指定數(shù)目的字符。如果整個字符串的字符數(shù)比指定的數(shù)目少,則返回整個字符串。將字符串和指定的數(shù)目放在括號內(nèi)。例如:@right(“IdoubtIdidit”,8)返回字符串“Ididit”。

(4)@str:

將數(shù)值轉(zhuǎn)換為字符型。例如:!x=15@str(!x)返回字符串“15”。

(5)@val

:將字符型轉(zhuǎn)換為數(shù)值型(或標量型)。如果字符串中有非數(shù)值的字符,這些字符看作是數(shù)值的結(jié)束標志。如果第一個字符就是非數(shù)值的字符,函數(shù)返回零值。例如:%date=”02/13/95”

!month=@val(%date)

!year=@val(@right(%date,2))

!day=@val(@mid(%date,4,2))返回的數(shù)值為:!month=2,!year=95,!day=13??烧韕pt-15-

(6)@otod(ObsToDate):返回一個表示日期的字符串,這個日期是工作文件中的指定數(shù)目的日期。例如:

create150:190:4!x=16

%date=@otod(!x)返回的字符串為:%date=”1953:4”。

(7)@dtoo(DateToObs):返回一個標量,參數(shù)為工作文件中的一個觀測值日期,返回這個日期在工作文件中的位置(第幾個)。參數(shù)必須是Eviews中的一個有效的日期。

created2/1/9012/31/95%date=”1/1/93”

!t=@dtoo(%date)返回值為:!t=762。將字符串函數(shù)和操作符“+”結(jié)合起來,可以產(chǎn)生不同意義的字符串。重復(fù)以前用過的例子:!repeat=500%st1=“drawsfromthenormal”%st2=“Cauchy”%st3=@str(!repeat)+@left(%st1,16)+%st2+“distribution”字符串%st3的值為:“500drawsfromtheCauchydistribution”。可整理ppt-16-4.替代變量:Eviews允許我們用字符串和替代變量來建造命令行。例如:字符串變量%x為:%x="gdp"程序行:

ls%xc%x(-1)代表:

lsgdpcgdp(-1)將%x的內(nèi)容改為m1則程序行為:

lsm1cm1(-1)在本節(jié)中,我們將字符串變量%x稱為替代變量,因為它在命令行中被它的內(nèi)容替代。替代變量可以和字母、數(shù)字以及其它替代變量結(jié)合起來形成更長的字符串。這時,我們應(yīng)該用花括號“{”和“}”來確定替代變量的界限。例如:%type="Low"%vname="Income"seriesinc1inc1.label{%type}{%vname}%type="High"seriesinc2inc2.label{%type}{%vname}此程序?qū)⑿蛄衖nc1的標簽設(shè)為“LowIncome”,序列inc2的標簽設(shè)為“HighIncome”。在本例中,{%type}{%vname}是替代變量,因為命令行是用字符串變量的內(nèi)容來構(gòu)造的??刂谱兞客瑯右部梢员挥米魈娲兞?。例如:

可整理ppt-17-!i=1seriesy{!i}=nrnd!j=0seriesy{!j}{!i}=nrnd與命令:

seriesy1=nrndseriesy01=nrnd等價。將創(chuàng)建兩個序列y1和y01,它們是含有標準正態(tài)分布的(偽)隨機數(shù)集合。替代變量的一個重要的用處就是可以構(gòu)造對象的名稱。例如:!a=3%b="2"%c="temp"seriesx{!a}matrix(2,2)x{%b}vector(3)x_{%c}1則創(chuàng)建了一個序列x3、一個矩陣x2和一個向量x_temp1。替代變量對程序中對象的命名有很強的適應(yīng)性,但是,我們應(yīng)該避免用相同的名字代表不同的對象,例如,下面的例子就有可能引起混淆:可整理ppt-18-

!a=1seriesx{!a}!a=2matrixx{!a}在這個簡單的程序中,可以很清楚地看到x1是序列,x2是矩陣。但是在相對比較復(fù)雜的程序中,對!a的賦值和序列的聲明之間也許隔著許多程序,使我們不能一眼就看出替代變量x{!a}所代表的對象,一種比較好的方法就是對不同的對象用不同的名字,例如:!a=1seriesser{!a}!a=2matrixmat{!a}Eviews函數(shù)進行參數(shù)類型檢查,因此在調(diào)用帶有替代變量的函數(shù)的時候必須用括號。帶有字符型參數(shù)的函數(shù)只允許字符型的數(shù)據(jù)通過,帶有序列參數(shù)的函數(shù)只接受序列。如果要通過替代變量將序列傳入一個序列函數(shù)中,必須將替代變量括在括號中,使Eviews知道所使用的是字符串代表的對象,而不是字符串本身。例如:我們想要得出序列INCOME中的有效觀測值的數(shù)目,我們用函數(shù)@obs:@obs(income)如果我們想要用字符串變量%var來表示序列INCOME,正確的語法是:%var="income"@obs({%var})函數(shù)@obs(%var)將返回錯誤信息,因為@obs函數(shù)需要序列作參數(shù),而不是字符串。當將序列的參數(shù)通過替代變量傳給子程序時(下面將討論),也需要用括號。

可整理ppt-19-5.程序參數(shù)程序運行過程中的程序參數(shù)是一種特殊的字符串變量。參數(shù)允許我們在每一次運行程序的時候都可以改變字符串變量的值。我們可以在任何字符串變量有效的情況下使用程序參數(shù),在程序中可以使用任意數(shù)量的程序參數(shù),程序參數(shù)可以被命名為%0、%1、%2等等。當運行的程序含有參數(shù)時,必須要給參數(shù)提供具體值。如果使用Run按鈕或File/Run,將會看到一個對話框,可以輸入?yún)?shù)值。如果輸入run命令,則要在程序名的后面列出參數(shù)值。例如我們有一個程序名為regprog的程序:equationeq1smpl1980:31994:1eq1.ls%0c%1%1(-1)time用命令來運行REGPROG程序,使得%0="lgdp"和%1="m1",我們輸入:runregproglgdpm1程序通過執(zhí)行命令

eq1.lslgdpcm1m1(-1)time來對變量lgdp和c、m1、m1(-1)、time作回歸。同樣,你也可以通過單擊程序窗口的Run按鈕來運行程序,或選擇File/Run……。在出現(xiàn)的運行程序的對話框內(nèi),在Programnameorpath內(nèi)輸入程序的名字,在Programarguments內(nèi)輸入?yún)?shù)值。在本例中,在程序名中輸入regprog,參數(shù)中輸入

lgdpm1。在run命令或運行程序?qū)υ捒蛑?,任何沒有被賦值的參數(shù),都被認為是空。例如,假設(shè)我們有一個一行的程序regress:lsyctime%0%1%2%3%4%5%6%7%8可整理ppt-20-命令為:

runregressxx(-1)x(-2)執(zhí)行:

lsyctimexx(-1)x(-2)如果命令為:

runregress則執(zhí)行:

lsyctime在兩個例子中,Eviews將run命令中沒有包含的參數(shù)都忽略掉了。作為最后一個例子,我們重復(fù)上面提到的預(yù)測程序,但用參數(shù)簡化我們的工作。假設(shè)我們有程序MYPROG:workfile%0m1968:31997:6fetchprogdemo::%1smpl1968:51992:12equationreg1.ls%1c%1(-1)reg1.makeresid{%1}ressmpl93:11997:6reg1.forecast{%1}fitfreeze({%1}plot){%1}fit.linesave在本章開始時運行的兩個程序例子的結(jié)果可以通過運行MYPROG得出:runmyprogmyhousehsfrunmyprogmysp500fspcom可整理ppt-21-§24.4控制程序Eviews為我們提供了許多控制程序中命令的執(zhí)行方式。在程序中控制執(zhí)行意味著可以在變化的條件下有選擇地執(zhí)行命令或重復(fù)地執(zhí)行命令??刂瞥绦驁?zhí)行的方法與其它計算機語言類似。1.條件語句:(IF)在許多種情況下,我們希望只有在某些條件被滿足的情況下才執(zhí)行命令。Eviews用IF/ENDIF語句來表示條件和要執(zhí)行的命令。IF語句以if關(guān)鍵字開始,后面接條件表達式,接著是then關(guān)鍵字。在條件中可以用and/or,必要的時候用括號將條件括起來。如果表達式為真,endif前所有的命令都被執(zhí)行。如果表達式為假,所有的命令都被越過。表達式也可以有數(shù)值,此時,零值為假,所有非零值都為真。例如:if!stand=1or(!rescale=1and!redo=1)then seriesgnpstd=gnp/sqr(gvar) seriesconstd=cons/sqr(cvar)endifif!a>5and!a<10then smpl1950:11970:1+!aendifif!scalethen seriesnewage=age/!scaleendif可整理ppt-22-注意到所有的縮進都是為了程序看起來更清楚,對程序的執(zhí)行沒有任何的影響。IF語句可以帶有ELSE分句,其中包含的命令在條件為假的時候被執(zhí)行。如果條件為真,在else前所有的命令都被執(zhí)行。如果條件為假,所有在else和endif之間的命令都被執(zhí)行。例如:If!scale>0then seriesnewage=age/!scaleelse seriesnewage=ageendifIF語句也可以被用在字符串變量中和嵌套使用:If%0=”ca”or%0=”in”then seriesstateid=1else if%0=”ma”then seriesstateid=2 else if%0=”id”then seriesstateid=3 endif endifendif可整理ppt-23-所有字符串的比較都是不區(qū)分大小寫的。所有的比較都是按語素進行的,并且按ASCII碼的順序。如果兩個字符串的字符數(shù)相同且每個字符都匹配,則認為它們相等。兩個字符串相比,相應(yīng)位置上的字符在字母表中出現(xiàn)位置較早則字符串小,位置較后的則字符串大。例如:%1=”a”%2=”b2”則以下的不等式為真:%1<”abc”and“abc”<%2and“%2”<”d”“259”<%1and%1<”aa”and“aa”<%2and%2<”ba”“b”<%1and%1<”a1”and“a1”<”b110”and“b110”<%2字符串“A”小于字符串“ABC”,因為字符串的第一個字符相匹配;其余的字符bc使得字符串“ABC”更大?!癆”比任何數(shù)字組成的字符都要大,因為字母在ASCII碼表中的位置較后。為了檢查一個字符串是否含有字符,或檢查字符串是否為空字符串,例如:

if%str<>””then如果字符串%str不為空,則執(zhí)行then以下的命令。檢查一個標量是否含有空值,將其與na比較,例如:

if!a<>nathen如果!a不為空,則執(zhí)行then以后的命令。注意到與na相比的不等式通常都認為是假,例如:if3>nathenif3<=nathen都為假。上述IF語句中用到的都是數(shù)值或字符串變量,當用戶在

IF語句中用到了序列或矩陣時,表達式中只有當對象的每一個元素之間的比較都為真時才為真。因此,對于序列X和

Y,IF語句:可整理ppt-24-ifx<>ythen [程序行]endif如果X的任何一個元素和Y中對應(yīng)的元素不相等時,條件就為真。對于X和Y都是矩陣的情況,也是如此。

2.FOR循環(huán)FOR循環(huán)允許我們對不同的控制和字符串變量重復(fù)執(zhí)行一個命令集合。FOR循環(huán)以for關(guān)鍵字開始、以next關(guān)鍵字結(jié)束。在兩個關(guān)鍵字之間可以有任意多的命令。FOR循環(huán)的語法區(qū)別主要在于是使用控制變量還是使用字符串變量。(1)

帶有控制變量或標量的FOR循環(huán):為了給一個控制變量賦不同的值,for循環(huán)先給一個控制變量賦初值,然后接to關(guān)鍵字、最后是結(jié)束值。結(jié)束值后可以接step關(guān)鍵字,step后的數(shù)值代表每次循環(huán)的步長。如果省略step,則默認值是1。例如:for!j=1to10 seriesdecile{!j}=(income<level{!j})next在本例中,步長step為1,變量!j兩次被用作替代變量,第一次用來聲明decile1到decile10十個序列,第二次用來聲明level1到level10十個變量。可整理ppt-25-For!j=10to1step–1 Seriesrescale{!j}=original/!jnext在本例中,步長step為-1,!j被用作替代變量來建造rescale1到rescale10十個序列,也被用作標量來除序列original。循環(huán)按初始值開始運行,除非初始值已經(jīng)超出終止值的范圍。按初始值增加后,控制變量按步長增加,Eviews將變量與終止值進行比較,如果超出終止值,循環(huán)結(jié)束。FOR循環(huán)的一個重要的用途是用控制變量來改變序列的樣本區(qū)間。如果在smpl命令的日期后加上控制變量的值,就會得到一個新的日期,而整個序列樣本區(qū)間長度的增加值即為控制變量的值。下面的例子就逐漸增加樣本區(qū)間的長度,并滾動地進行方程回歸的估計。For!horizon=10to72 smpl1970:11970:1+!horizon equationeq{!horizon}.lssalescordersnext另外一個重要的用途是用循環(huán)變量得到序列或矩陣對象中元素的值。例如:!rows=@rows(vec1)vectorcumsum1=vec1for!i=2to!rows cumsum1(!i)=cumsum1(!i-1)+vec1(!i)next可整理ppt-26-本例計算了向量vec1中元素的累計和,并將其存在向量cumsum1中。為獲得一個序列的單個元素,用戶須用@elem函數(shù)和@otod來得到所需的函數(shù):

for!i=2to!rows cumsum1(!i)=@elem(ser1,@otod(!i))next這里@otod函數(shù)返回的是和觀測值數(shù)相關(guān)的期數(shù)(從工作文件的起始期開始),@elem函數(shù)根據(jù)一個給定的期數(shù)來獲得序列的元素??梢栽贔OR循環(huán)中進行嵌套。例如:matrix(25,10)xxfor!i=1to25 for!j=1to10 xx(!i,!j)=(!i-1)*10+!j nextnext我們應(yīng)該避免在FOR循環(huán)中改變控制變量的值,例如:for!i=1to25 vectora!i !i=!i+10next可整理ppt-27-這里,F(xiàn)OR循環(huán)的聲明中和命令中均改變控制變量!i的值。這種循環(huán)很難被執(zhí)行,并且通常會得到意想不到的結(jié)果。如果你想要在循環(huán)中改變控制變量的值,用我們以下將要講到的while循環(huán)。我們也可以在FOR循環(huán)中用標量代替控制變量。但我們在使用之前必須聲明,并且標量不能用作替代變量使用。例如:scalariscalarsum=0vector(10)xfori=1to10 x(i)=i sum=sum+inext本例中,標量i和SUM在程序結(jié)束的時候仍然存在于工作文件中,除非它們被故意刪掉。(2)帶有字符串變量的FOR循環(huán):當想對一個字符串變量進行重復(fù)賦值時,我們可以在FOR循環(huán)中使字符串變量在字符串列表中取值。字符串變量后接字符串列表。例如:for%ygdpgnpndpnnp equation{%y}trend.ls%yc{%y}(-1)timenext

可整理ppt-28-執(zhí)行命令:

equationgdptrend.lsgdpcgdp(-1)timeequationgnptrend.lsgnpcgnp(-1)timeequationndptrend.lsndpcndp(-1)timeequationnnptrend.lsnnpcnnp(-1)time我們可以在一個FOR循環(huán)中使用多個字符串變量——Eviews會對這些字符串進行分組。例如:for%1%2%31955:11960:4early1970:21980:3mid1975:41995:1late smpl%1%2 equation{%3}eq.lssalescordersnext本例中,字符串中的元素被分成三組。循環(huán)使用不同的樣本區(qū)間和方程名運行了三次:smpl1955:11960:4equationearlyeq.lssalescorderssmpl1970:21980:3equationmideq.lssalescorderssmpl1975:41995:1equationlateeq.lssalescorders注意此種形式和循環(huán)嵌套的區(qū)別。這里,所有的字符串變量同時變化,而嵌套循環(huán)中,內(nèi)部循環(huán)的變量變化時,外部變量是不變的。例如:可整理ppt-29-!eqno=1for%11955:11960:4 for%21970:21980:31975:4 smpl%1%2 equationeq{!eqno}.lssalescorders !eqno=!eqno+1 nextnext這樣估計的六個方程為:

區(qū)間:1955:11970:2方程為:eq1

區(qū)間:1955:11980:3方程為:eq2

區(qū)間:1955:11975:4方程為:eq3

區(qū)間:1960:41970:2方程為:eq4

區(qū)間:1960:41980:3方程為:eq5

區(qū)間:1960:41975:4方程為:eq6可整理ppt-30-3.WHILE循環(huán) 在某些情況下,我們希望多次重復(fù)執(zhí)行一些命令,但只有一個或幾個條件被滿足。與FOR循環(huán)相似,WHILE循環(huán)允許我們重復(fù)執(zhí)行命令,但WHILE循環(huán)在聲明循環(huán)條件的時候具有更大的靈活性。WHILE循環(huán)以while關(guān)鍵字開始,以wend結(jié)束。在兩個關(guān)鍵字之間允許有任意多的命令。WHILE循環(huán)允許嵌套。WHILE循環(huán)的聲明部分由while關(guān)鍵字后接表達式構(gòu)成。表達式可以有邏輯值(真/假)和數(shù)值兩種情況。為數(shù)值時,零被認為是假,任何非零值都被認為是真。如果表達式值為真,直到wend的命令均被執(zhí)行,然后重復(fù)此過程。如果表達式的值為假,Eviews將越過下面的命令直接執(zhí)行wend以后的命令。例如:!val=1!a=1while!val<10000and!a<10 smpl1950:11970:1+!a seriesinc{!val}=income/!val !val=!val*10 !a=!a+1wend可整理ppt-31-這個WHILE循環(huán)包括四個部分。第一部分是控制變量的初始化。第二部分是WHILE循環(huán)的聲明,并包括條件。第三部分是改變控制變量的聲明。最后一部分用wend來結(jié)束循環(huán)。WHILE循環(huán)不像FOR循環(huán),它不在測試條件中改變控制變量的值,必須在循環(huán)中有明確的聲明來改變控制變量的值,否則循環(huán)將永遠不會停止。用F1鍵可以使程序從死循環(huán)中跳出。上面FOR循環(huán)中有一個改變控制變量的例子,用WHILE循環(huán)會使程序更清楚:!i=1while!i<=25 vectora{!i} !i=!i+10wend可整理ppt-32-4.處理執(zhí)行錯誤:缺省情況下,Eviews將在遇到任何錯誤時中止程序的執(zhí)行,但用戶可以指定程序在遇到錯誤的情況下繼續(xù)運行。這種情況下,用戶還可能希望在錯誤出現(xiàn)時執(zhí)行其它不同的任務(wù)。例如,在估計過程出錯時,可能希望跳過那些累計估計結(jié)果的程序行。為測試和處理執(zhí)行錯誤,我們可以用@errorcount這個函數(shù)來返回程序執(zhí)行過程中出現(xiàn)的錯誤數(shù)。

!errs=@errorcount標準程序語句可以用這些有關(guān)出錯數(shù)目的信息來控制程序的行為。例如,為測試方程估計時是否出錯,用戶可以比較一下方程估計命令執(zhí)行前后的出錯數(shù):!old_count=@errorcountequationeq1.lsyxc!new_count=@errorcountif!new_count>!old_countthen [其他命令]

endif這里,當方程eq1的估計出錯時,執(zhí)行了一組命令??烧韕pt-33-5.其它控制工具:有時,我們希望在某些條件下從程序或循環(huán)中退出,在Eviews中,要從程序中退出,使用stop命令。例如,假設(shè)我們寫一段程序,要使序列ser1中的值非負。下面的命令將檢查序列的值是否非負,并且,序列中如果含有任意負值,程序?qū)⒔Y(jié)束:seriestest=(ser1<0)if@sum(test)<>0then stopendif注意到如果序列ser1中有缺失值,序列test中相對位置上也為缺失值。因為函數(shù)@sum將忽略缺失值,所以,程序在序列ser1中有缺失值時不會跳出。有時,我們不希望在某些條件被滿足的時候跳出整個程序,只跳出當前的循環(huán)。Exitloop命令會跳出當前的FOR或WHILE循環(huán)而繼續(xù)執(zhí)行程序。例如,假設(shè)我們計算了一系列的LR檢驗統(tǒng)計量LR11,LR10,LR9,……,LR1,假設(shè)要檢驗一個VAR的滯后長度。下面的程序從LR11開始順序的進行LR檢驗,并給出在5%顯著性水平下第一個被拒絕的統(tǒng)計量。!df=9for!lag=11to1step–1

!pval=1-@cchisq(LR{!lag},!df) if!pval<=.05then exitloop endifnextscalarlag=!lag注意到,如果沒有檢驗統(tǒng)計量被拒絕,則標量lag的值為0??烧韕pt-34-§24.5多程序文件當程序很長時,用戶可能希望用多個文件來存放其代碼。例如,假定有一個名為powers.prg的程序文件,文件中有一些程序行。可能你會用run命令來運行文件中的命令,但Eviews將在執(zhí)行完該文件中的命令后終止程序運行。因此,對于下列的程序行:runpowers.prgseriesx=nrndEviews將只執(zhí)行powers.prg中的命令,然后在生成序列x之前就將終止程序的運行。而用戶可能意識不到這一行為。不過我們可以在另一個程序文件中用關(guān)鍵字include來包含一個程序文件中的內(nèi)容。例如,其他程序如需powers中的命令,可在程序的頂部添加一行:includepowers也可以在include語句中寫出文件的完整路徑,并且在一個程序中可用多個include語句來包含多個程序文件。例如下面的程序行:includec:\programs\powers.prgincludedurbin_h[其他程序行]將首先執(zhí)行c:\programs\powers.prg中的命令,然后執(zhí)行durbin_h.prg中的命令,接下來才是執(zhí)行程序文件中其他的程序行。重復(fù)使用命令和參數(shù)的更為一般性的方法是使用子程序。

可整理ppt-35-§24.6子程序子程序是一個命令集合,這個集合可以重復(fù)地處理一些給定的任務(wù),不用重新輸入命令,只需作些很小的改動就可以。我們也可以用一個程序中的子程序來處理另一個程序中相同的問題。1.定義子程序一個子程序以subroutine開始,后接函數(shù)名和參數(shù),并以endsub結(jié)束。其中可以有任意多的命令。最簡單的子程序為以下形式:subroutinez_square seriesx=z^2endsub這里,關(guān)鍵字subroutine后只有子程序名,因為沒有參數(shù),這個子程序每次運行的結(jié)果都是相同的。它形成序列z的平方,并將其存在序列x中。在Eviews中,我們使用return命令,可以在任何時候從子程序中退出。return命令的一般用法是,當檢查到子程序中有錯誤的時候,可以從其中退出。下面的程序中,如果檢驗序列相關(guān)的、帶有滯后因變量的Durbin的h統(tǒng)計量的值無法計算的話,則從子程序中退出:subroutinedurbin_h equationeqn.lscsccs(-1)inc scalartest=1-

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論