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

下載本文檔

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

文檔簡介

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

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

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

File\New\Program

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

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

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

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

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

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

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

1.控制變量

控制變量是在程序中用來代替數(shù)據(jù)的變量。一旦控制變量被賦值,我們就可以在程序中任意運(yùn)用該數(shù)據(jù)的地方使用該控制變量??刂谱兞康拿Q以

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

例如:

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

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

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

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

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

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

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

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

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

(2)@mid

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

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

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

(4)@str:

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

(5)@val

:將字符型轉(zhuǎn)換為數(shù)值型(或標(biāo)量型)。如果字符串中有非數(shù)值的字符,這些字符看作是數(shù)值的結(jié)束標(biāo)志。如果第一個(gè)字符就是非數(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):返回一個(gè)表示日期的字符串,這個(gè)日期是工作文件中的指定數(shù)目的日期。例如:

create150:190:4!x=16

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

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

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稱為替代變量,因?yàn)樗诿钚兄斜凰膬?nèi)容替代。替代變量可以和字母、數(shù)字以及其它替代變量結(jié)合起來形成更長的字符串。這時(shí),我們應(yīng)該用花括號(hào)“{”和“}”來確定替代變量的界限。例如:%type="Low"%vname="Income"seriesinc1inc1.label{%type}{%vname}%type="High"seriesinc2inc2.label{%type}{%vname}此程序?qū)⑿蛄衖nc1的標(biāo)簽設(shè)為“LowIncome”,序列inc2的標(biāo)簽設(shè)為“HighIncome”。在本例中,{%type}{%vname}是替代變量,因?yàn)槊钚惺怯米址兞康膬?nèi)容來構(gòu)造的。控制變量同樣也可以被用作替代變量。例如:

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

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

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

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

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

lgdpm1。在run命令或運(yùn)行程序?qū)υ捒蛑?,任何沒有被賦值的參數(shù),都被認(rèn)為是空。例如,假設(shè)我們有一個(gè)一行的程序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在兩個(gè)例子中,Eviews將run命令中沒有包含的參數(shù)都忽略掉了。作為最后一個(gè)例子,我們重復(fù)上面提到的預(yù)測(cè)程序,但用參數(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在本章開始時(shí)運(yùn)行的兩個(gè)程序例子的結(jié)果可以通過運(yùn)行MYPROG得出:runmyprogmyhousehsfrunmyprogmysp500fspcom可整理ppt-21-§24.4控制程序Eviews為我們提供了許多控制程序中命令的執(zhí)行方式。在程序中控制執(zhí)行意味著可以在變化的條件下有選擇地執(zhí)行命令或重復(fù)地執(zhí)行命令??刂瞥绦驁?zhí)行的方法與其它計(jì)算機(jī)語言類似。1.條件語句:(IF)在許多種情況下,我們希望只有在某些條件被滿足的情況下才執(zhí)行命令。Eviews用IF/ENDIF語句來表示條件和要執(zhí)行的命令。IF語句以if關(guān)鍵字開始,后面接條件表達(dá)式,接著是then關(guān)鍵字。在條件中可以用and/or,必要的時(shí)候用括號(hào)將條件括起來。如果表達(dá)式為真,endif前所有的命令都被執(zhí)行。如果表達(dá)式為假,所有的命令都被越過。表達(dá)式也可以有數(shù)值,此時(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-注意到所有的縮進(jìn)都是為了程序看起來更清楚,對(duì)程序的執(zhí)行沒有任何的影響。IF語句可以帶有ELSE分句,其中包含的命令在條件為假的時(shí)候被執(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ū)分大小寫的。所有的比較都是按語素進(jìn)行的,并且按ASCII碼的順序。如果兩個(gè)字符串的字符數(shù)相同且每個(gè)字符都匹配,則認(rèn)為它們相等。兩個(gè)字符串相比,相應(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”,因?yàn)樽址牡谝粋€(gè)字符相匹配;其余的字符bc使得字符串“ABC”更大?!癆”比任何數(shù)字組成的字符都要大,因?yàn)樽帜冈贏SCII碼表中的位置較后。為了檢查一個(gè)字符串是否含有字符,或檢查字符串是否為空字符串,例如:

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

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

IF語句中用到了序列或矩陣時(shí),表達(dá)式中只有當(dāng)對(duì)象的每一個(gè)元素之間的比較都為真時(shí)才為真。因此,對(duì)于序列X和

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

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

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

for!i=2to!rows cumsum1(!i)=@elem(ser1,@otod(!i))next這里@otod函數(shù)返回的是和觀測(cè)值數(shù)相關(guān)的期數(shù)(從工作文件的起始期開始),@elem函數(shù)根據(jù)一個(gè)給定的期數(shù)來獲得序列的元素。可以在FOR循環(huán)中進(jì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í)行,并且通常會(huì)得到意想不到的結(jié)果。如果你想要在循環(huán)中改變控制變量的值,用我們以下將要講到的while循環(huán)。我們也可以在FOR循環(huán)中用標(biāo)量代替控制變量。但我們?cè)谑褂弥氨仨毬暶?,并且?biāo)量不能用作替代變量使用。例如:scalariscalarsum=0vector(10)xfori=1to10 x(i)=i sum=sum+inext本例中,標(biāo)量i和SUM在程序結(jié)束的時(shí)候仍然存在于工作文件中,除非它們被故意刪掉。(2)帶有字符串變量的FOR循環(huán):當(dāng)想對(duì)一個(gè)字符串變量進(jìn)行重復(fù)賦值時(shí),我們可以在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我們可以在一個(gè)FOR循環(huán)中使用多個(gè)字符串變量——Eviews會(huì)對(duì)這些字符串進(jìn)行分組。例如:for%1%2%31955:11960:4early1970:21980:3mid1975:41995:1late smpl%1%2 equation{%3}eq.lssalescordersnext本例中,字符串中的元素被分成三組。循環(huán)使用不同的樣本區(qū)間和方程名運(yùn)行了三次:smpl1955:11960:4equationearlyeq.lssalescorderssmpl1970:21980:3equationmideq.lssalescorderssmpl1975:41995:1equationlateeq.lssalescorders注意此種形式和循環(huán)嵌套的區(qū)別。這里,所有的字符串變量同時(shí)變化,而嵌套循環(huán)中,內(nèi)部循環(huán)的變量變化時(shí),外部變量是不變的。例如:可整理ppt-29-!eqno=1for%11955:11960:4 for%21970:21980:31975:4 smpl%1%2 equationeq{!eqno}.lssalescorders !eqno=!eqno+1 nextnext這樣估計(jì)的六個(gè)方程為:

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

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

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

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

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論