版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、主要內(nèi)容基本概念與工具程序文件的基本格式程序控制語(yǔ)句實(shí)驗(yàn)實(shí)驗(yàn)16-1:基本概念與工具:基本概念與工具實(shí)驗(yàn)基本原理實(shí)驗(yàn)基本原理如果我們需要反復(fù)執(zhí)行一些命令,就可以將相關(guān)命令存放在一個(gè)do文件中,然后保存并運(yùn)行相應(yīng)的do文件即可。相比起一遍一遍地輸入命令,這種方式既方便又不容易出錯(cuò)。而另一些時(shí)候,我們會(huì)需要編寫程序,從而能用一個(gè)命令來實(shí)現(xiàn)某種結(jié)果。一個(gè)程序應(yīng)以program開頭,以end結(jié)束。也就是說,應(yīng)呈現(xiàn)如下的形式:program 程序名相應(yīng)的命令end我們可以采取交互的方式定義程序(即,在Stata命令窗口中輸入程序的各行命令),但實(shí)際應(yīng)用中,程序經(jīng)常是被保存到一個(gè)do文件或ado文件中去,
2、從而方便以后的應(yīng)用。在程序或do文件中,我們可能需要加入注釋,從而方便以后或他人的閱讀。通常,我們還會(huì)聲明版本,從而使得程序能夠在以后更高版本的Stata中繼續(xù)使用。此外,局部宏、全局宏、臨時(shí)變量、臨時(shí)矩陣和臨時(shí)文件等也會(huì)經(jīng)常被使用。實(shí)驗(yàn)內(nèi)容及數(shù)據(jù)來源實(shí)驗(yàn)內(nèi)容及數(shù)據(jù)來源本實(shí)驗(yàn)中,我們會(huì)講解do文件的創(chuàng)建和執(zhí)行方法、定界符的修改、程序和do文件的聯(lián)系、ado文件的創(chuàng)建和保存、注釋的添加方法、版本的聲明、局部宏和全局宏的定義及引用以及臨時(shí)變量、臨時(shí)矩陣和臨時(shí)文件的定義和使用等內(nèi)容。本實(shí)驗(yàn)主要講解編寫程序的一些基本操作,不需要使用數(shù)據(jù)文件。實(shí)驗(yàn)操作指導(dǎo)實(shí)驗(yàn)操作指導(dǎo)1 Do文件文件do文件是一種文本文
3、件,其擴(kuò)展名為“.do”。要?jiǎng)?chuàng)建一個(gè)do文件,可以通過菜單欄中Window的下拉選項(xiàng)Do-file Editor來打開Do文件編輯器,也可以直接點(diǎn)擊工具欄的圖標(biāo) 。而要執(zhí)行一個(gè)do文件,可以鍵入以下命令:do filename這里,filename指相應(yīng)的do文件的文件名。但需要注意的一點(diǎn)是,這個(gè)filename.do文件需要放在當(dāng)前目錄下,只有這樣,才可以不寫文件的路徑;否則,需要在文件名前寫出完整路徑(而如果路徑中有中文字符,一定要將全部路徑和文件名置于英文雙引號(hào)之間)。要查看當(dāng)前目錄,我們可輸入命令:cd當(dāng)然,我們也可以先將當(dāng)前目錄更改到我們偏好的一個(gè)文件夾下,然后再將do文件存放其中。
4、例如,如下命令可以將當(dāng)前目錄更改到d盤data文件夾下:cd “D:data”這里,需要注意的一點(diǎn)是,cd命令要求其后的文件夾原來就存在。對(duì)于do文件中的命令,值得注意的是,每一行命令都需要結(jié)束于一個(gè)硬回車(包括最后一行);除非通過“#delimit”命令設(shè)置其他符號(hào)為換行符。例如,輸入命令:#delimit .則我們?cè)O(shè)置以英文的句號(hào)作為換行符,也就是說,Stata只有遇到英文句號(hào)才會(huì)認(rèn)為這一句命令結(jié)束。設(shè)置其他的換行符對(duì)于將很長(zhǎng)的命令分成幾行很有幫助,因?yàn)檫@時(shí)我們可以在想分行的地方輸入回車符,而Stata又不會(huì)認(rèn)為這是一句命令的結(jié)束。而如果我們想重新以硬回車(carriage return)
5、為換行符,可輸入以下命令:#delimit cr2 Stata程序和程序和Do文件文件Stata處理程序和處理do文件的方式是一樣的,包括參數(shù)的傳遞、結(jié)果的表達(dá)等。但do文件和程序也存在一些小的差別。例如,要激發(fā)一個(gè)do文件,我們需要鍵入“do filename”,而要激發(fā)一個(gè)程序,我們只需要鍵入程序名稱就可以。此外,鍵入“do filename”之后,Stata會(huì)顯示do文件中的命令以及執(zhí)行結(jié)果;而鍵入程序名之后,Stata只會(huì)顯示其執(zhí)行結(jié)果。下面,我們重點(diǎn)講一下,通常情況下,將程序放到do文件中去需要注意的問題。例如,我們編寫了一個(gè)簡(jiǎn)單的程序:program exampdisplay “t
6、his is an example”end并把它保存到名為“examp.do”的文件中,且把文件置于當(dāng)前目錄下。下面,我們要執(zhí)行這個(gè)do文件,就在Stata命令窗口輸入如下的命令:do examp下面,我們?cè)僭诿畲翱谳斎朊睿篹xamp也就是說,我們要執(zhí)行程序examp。這時(shí),Stata就會(huì)顯示:this is an example在隨后的時(shí)間里,我們?nèi)绻€想顯示“this is an example”,直接輸入命令“examp”就可以。這里,我們展示了共同使用do文件和程序的一種方式,即,先在do文件中寫出程序的命令并保存,再鍵入“do filename”,然后就可以在隨后的時(shí)間使用該程序
7、命令了。當(dāng)然,我們也可采取一種更為簡(jiǎn)潔的方式,即在do文件的最后一行加上程序名,這樣,當(dāng)鍵入“do filename”的時(shí)候,Stata就會(huì)在加載完程序后就執(zhí)行程序。但需要注意的是,程序一旦被定義,Stata就不允許對(duì)其重新定義。這樣,如果我們隨后又輸入一遍“do filename”,Stata就會(huì)顯示錯(cuò)誤提示。要解決這個(gè)問題,我們可以在do文件的第一行輸入這樣的命令:program drop 程序名這樣,在定義該程序之前,如果內(nèi)存中已有這個(gè)程序,我們會(huì)先將其從內(nèi)存中刪掉。但這種解決方案也存在一個(gè)問題:在打開Stata的期間第一次運(yùn)行這個(gè)do文件,Stata會(huì)顯示錯(cuò)誤提示。因?yàn)檫@時(shí)還沒有定義程
8、序,所有沒有辦法將其刪除。我們繼續(xù)修正該命令為:capture program drop 文件名將命令“capture”置于其他命令之前,就表示無論該命令是否作用,Stata也不顯示錯(cuò)誤提示,且能繼續(xù)執(zhí)行下面的命令。事實(shí)上,在包含程序的do文件中,我們經(jīng)??梢钥吹匠绦虻亩x之前有這樣的命令。綜合了以上幾點(diǎn),我們前面的do文件可以修改為這樣的形式:capture program drop exampprogram exampdisplay “this is an example”endexamp這里,第一行先檢查是否有已定義的examp程序,如果有就將其從內(nèi)存中刪除。第二到四行是定義程序exam
9、p,最后一行是執(zhí)行程序examp。3 Ado文件文件如果想自動(dòng)加載并運(yùn)行程序內(nèi)容,我們可以將程序保存到ado(automatically do)文件中(同樣是利用do文件編輯器,保存時(shí)選擇擴(kuò)展名為ado),以后,直接輸入程序名就可以使用該程序。但需要注意的是,ado文件的文件名和其中的程序名必須一致。值得注意的是,如果在Stata運(yùn)行的過程中改變了某個(gè)ado文件的命令語(yǔ)句,則在重新運(yùn)行這個(gè)ado文件前,要先將Stata內(nèi)存中的ado文件清除。即,輸入命令:discard否則,Stata還是會(huì)運(yùn)行原來的那個(gè)ado文件。個(gè)人編寫的ado文件通常被存放在兩個(gè)地方,一個(gè)是當(dāng)前目錄,另一個(gè)是個(gè)人ado目
10、錄。個(gè)人ado目錄通常位于“C:adopersonal”,要查看其具體位置,可輸入命令:personal而要查看或改變當(dāng)前目錄,可使用命令“cd”。4 版本版本隨著Stata版本的變化,相應(yīng)的命令也會(huì)有些變化。這樣,較早版本的命令可能就沒法在現(xiàn)在的版本中使用,而現(xiàn)在的某些命令可能也沒法在以后的版本中使用。為了讓現(xiàn)在的程序能夠在其他的版本中繼續(xù)使用,我們可以在程序中聲明所使用的版本;這樣,在更新版本的Stata中運(yùn)行這個(gè)程序,Stata就會(huì)做相應(yīng)的調(diào)整,按當(dāng)前版本的方式來翻譯程序的命令。要聲明版本,可輸入命令:version 10.1這里,我們使用的是10.1版的Stata。對(duì)于其他版本的Sta
11、ta,在version后面輸入相應(yīng)的版本編號(hào)即可。5 注釋注釋有時(shí),我們想在命令中加入注釋,從而方便以后或他人的閱讀。要在do文件或ado文件中加入注釋,可以采取如下幾種方式:1.以“*”來開始一行。這樣,該行就會(huì)被當(dāng)做注釋。2.將注釋放在“/*”和“*/”之間。該種格式可以置于句中的任何位置。此外,在行末使用“/*”,并在下一行行首使用“*/”,可以將很長(zhǎng)的命令分成兩行。3.將注釋置于雙斜線“/”之后。如果雙斜線之前有命令,則雙斜線與命令之間至少要有一個(gè)空格。4.將注釋置于三斜線“/”之后。如果三斜線之前有命令,斜線與命令之間也是至少要有一個(gè)空格。此外,對(duì)于“/”,其下一行的命令會(huì)被認(rèn)為是前
12、面命令的繼續(xù)。三斜線也可單獨(dú)置于行尾,從而將很長(zhǎng)的命令分成幾行。例如,我們可以寫這樣一段命令:*this is an exampleuse /*get data*/ C:Stata10datasample.dtasummarize age education /occupation tab region / obtain summary statistics如果去掉注釋,上面的命令即為:use C:Stata10datasample.dtasummarize age education occupation tab region此外,對(duì)于交互方式的命令,注釋只可采取第一種方式,即在句首加上“*
13、”。6 宏宏宏是Stata程序的變量,它用一個(gè)字符串(宏的名稱)來代表另一個(gè)字符串(宏的內(nèi)容)。宏分為局部宏(local macro)和全局宏(global macro)。局部宏只屬于其所定義的程序,不能從其他程序中調(diào)用。而全局宏一旦被定義,就會(huì)留在內(nèi)存,且可以被其他程序使用。局部宏的名稱最多有31個(gè)字符,它的定義方式為:local 宏的名稱 宏的內(nèi)容或: local 宏的名稱=表達(dá)式例如,我們輸入命令:local nv “this is a newvar”就定義了一個(gè)叫做nv的局部宏,其內(nèi)容為this is a newvar。如果我們要引用這個(gè)局部宏的內(nèi)容,其格式為:nv。注意,左邊的引號(hào)為
14、標(biāo)準(zhǔn)鍵盤左上角的重音符(數(shù)字1左邊的鍵),右邊的引號(hào)為通常的單引號(hào)(回車鍵左邊的鍵)。定義完畢之后,如果我們輸入:nv我們就相當(dāng)于輸入了:this is a newvar例如,我們可以輸入如下的命令來顯示這個(gè)宏的內(nèi)容:display “nv”注意,這里,宏nv外面的雙引號(hào)必不可少,因?yàn)槿绻患右?hào),我們相當(dāng)于輸入了如下的命令:display this is a newvarStata會(huì)顯示錯(cuò)誤提示:this not found。只有加上外面的雙引號(hào),才表示我們要顯示一個(gè)字符串。否則,Stata會(huì)將其當(dāng)做變量來處理。當(dāng)然,如果宏的內(nèi)容確實(shí)為存在的變量名,而我們要顯示這個(gè)變量,就不必加上雙引號(hào)。對(duì)
15、于定義局部宏的命令,宏內(nèi)容上的引號(hào)可以省略。也就是說,我們?cè)诙x時(shí),可以采用如下的命令:local nv this is a newvar這與前面是等價(jià)的。當(dāng)然,加上引號(hào)能使命令的可讀性更強(qiáng)。下面,我們來看一下定義宏的兩種形式的區(qū)別。例如,對(duì)于如下兩種形式:local one 3+2 或等價(jià)地,local one “3+2”local two=3+2第一種形式中,局部宏one的內(nèi)容為字符串3+2;而第二種形式中,Stata會(huì)先計(jì)算表達(dá)式的結(jié)果(3+2=5),然后將5保存到宏two中。在第二種形式中,表達(dá)式可以是數(shù)值表達(dá)式或字符串表達(dá)式。這里,3+2是數(shù)值表達(dá)式(如果想令其為字符串型,在外面加雙
16、引號(hào)就可以)。此外,局部宏(以及全局宏)可以組合使用。例如,局部宏i為數(shù)值6,宏x6 為字符newvar,則宏xi就指代字符newvar。另外,在組合時(shí),我們可以通過大括號(hào)來設(shè)定運(yùn)算的優(yōu)先級(jí)。如果要清除一個(gè)局部宏,可將其內(nèi)容設(shè)置為空。這可以通過如下三種方式實(shí)現(xiàn):local macnamelocal macname local macname = 這里,macname指宏的名稱。而如果我們?cè)诔绦蛑兄苯邮褂昧艘粋€(gè)沒有被定義的宏,則Stata會(huì)將其當(dāng)做一個(gè)內(nèi)容為空的宏來處理。對(duì)于全局宏而言,其名字最多可以有32個(gè)字符長(zhǎng)。全局宏的定義方法與局部宏類似,只需要將local改為global即可。此外,引用
17、全局宏時(shí),在其名字前加上美元符號(hào)$。此外,即便程序中的全局宏和局部宏有相同的名稱也沒有關(guān)系,因?yàn)樗麄兊囊梅椒ú煌?,Stata可以將其區(qū)分。值得注意的一點(diǎn)是,如果我們要顯示的內(nèi)容第一個(gè)字符為美元符號(hào),為了和全局宏進(jìn)行區(qū)分,我們可以在該字符前加上反斜線。例如:display “$that”就表示要顯示字符串$that,而不是全局宏that的內(nèi)容。7 臨時(shí)變量、臨時(shí)矩陣和臨時(shí)文件臨時(shí)變量、臨時(shí)矩陣和臨時(shí)文件有些時(shí)候,程序在運(yùn)行的過程中需要產(chǎn)生一些臨時(shí)的變量、矩陣等,而一旦程序運(yùn)行結(jié)束,這些變量、矩陣等就不再需要。這種情況下,我們可以生成臨時(shí)變量等。生成臨時(shí)變量的命令格式為:tempvar var1
18、 var2 這里,tempvar 是生成臨時(shí)變量的基本命令,var1、var2代表臨時(shí)變量的名稱。確切地說,命令tempvar生成的是臨時(shí)變量的名稱,我們后面可以使用這些名稱來生成臨時(shí)變量;這些臨時(shí)變量在程序結(jié)束時(shí)會(huì)被自動(dòng)刪掉。此外,tempvar生成的變量名被保存在局部宏內(nèi),在后面引用時(shí)需要加引號(hào)。臨時(shí)變量的一個(gè)優(yōu)點(diǎn)在于,即便內(nèi)存中已存在相同名稱的變量,我們也不必先將其刪掉;這不會(huì)影響我們定義臨時(shí)變量。例如,我們要定義并生成兩個(gè)臨時(shí)變量x和y(可能內(nèi)存中已有變量是這個(gè)名稱,但沒有關(guān)系),可輸入命令:tempvar x ygen x= gen y=這里,第一步是定義臨時(shí)變量,第二步和第三步是生
19、成相應(yīng)的臨時(shí)變量。我們這里沒有給出具體的表達(dá)式,因?yàn)檫@完全視具體情況而定。需要注意的是,在命令tempvar之后,我們引用臨時(shí)變量時(shí),都需要加上局部宏的引號(hào)。類似地,定義臨時(shí)矩陣或臨時(shí)標(biāo)量的命令為:tempname ms1 ms2 這里,tempname 是定義臨時(shí)矩陣或臨時(shí)標(biāo)量的基本命令,ms1、ms2等代表臨時(shí)矩陣或臨時(shí)變量的名稱。同樣地,定義臨時(shí)文件的命令為:tempfile file1 file2 這里,tempfile是定義臨時(shí)文件的基本命令,file1、file2代表臨時(shí)文件的名稱。例如,我們?cè)诔绦蛑锌赡艹霈F(xiàn)這樣的命令:preserve /保存初始數(shù)據(jù)tempfile males
20、females /定義臨時(shí)文件males和femaleskeep if sex=1 /*保留變量sex取值為1的觀測(cè)值*/save males /*將這些觀測(cè)值保存到臨時(shí)文件male中*/restore, preserve /恢復(fù)原始數(shù)據(jù)keep if sex=0 /保留變量sex取值為0的觀測(cè)值save females /將這些觀測(cè)值保存到臨時(shí)文件female中與臨時(shí)變量相同,在程序結(jié)束時(shí),Stata會(huì)自動(dòng)刪除臨時(shí)矩陣、臨時(shí)標(biāo)量或臨時(shí)文件。實(shí)驗(yàn)實(shí)驗(yàn)16-2:程序文件的基本格式:程序文件的基本格式實(shí)驗(yàn)基本原理實(shí)驗(yàn)基本原理在編寫程序時(shí),我們需要遵從一定的格式?;镜囊环N格式為:program d
21、efine 程序名, version #syntax end其中,第一行是定義程序,第二行是表明所用的Stata版本,第三行表明語(yǔ)法格式,后面是其他的一些命令,最后一行表明該程序結(jié)束。當(dāng)然,version和syntax都不是必選項(xiàng)。但syntax等命令的應(yīng)用在很多時(shí)候能使得程序的編寫變得比較方便。而當(dāng)我們不使用語(yǔ)法的時(shí)候,有時(shí)也會(huì)需要對(duì)輸入的參數(shù)進(jìn)行解析,這可以通過tokenize或gettoken命令來實(shí)現(xiàn)。此外,命令中使用的觀測(cè)值有時(shí)需要被標(biāo)記。例如,程序設(shè)定了條件語(yǔ)句、范圍語(yǔ)句,需要確認(rèn)其所使用的觀測(cè)值等。由于很多程序錯(cuò)誤產(chǎn)生于在程序的不同部分使用不同的樣本,因此,我們強(qiáng)烈建議在程序的開
22、始處對(duì)樣本進(jìn)行標(biāo)記。最后,很多程序需要保存一些結(jié)果,并且可以在運(yùn)行程序時(shí)返回相應(yīng)的結(jié)果。對(duì)于這些,我們也會(huì)進(jìn)行講解。實(shí)驗(yàn)內(nèi)容及數(shù)據(jù)來源實(shí)驗(yàn)內(nèi)容及數(shù)據(jù)來源本實(shí)驗(yàn)中,我們主要講解程序的定義、程序的刪除、程序內(nèi)容的顯示、變?cè)亩x和引用、語(yǔ)法的定義、標(biāo)記變量的生成和調(diào)整、輸入?yún)?shù)的解析、結(jié)果的保存和返回等內(nèi)容。本實(shí)驗(yàn)的部分命令會(huì)用到本書附帶光盤data文件夾下的“usaauto.dta”工作文件。該文件給出了美國(guó)汽車產(chǎn)業(yè)的橫截面數(shù)據(jù),主要變量包括:price=汽車的價(jià)格,mpg=每加侖油所行駛的英里數(shù),weight=汽車的重量,length=汽車長(zhǎng)度,turn=轉(zhuǎn)彎圓周,displacement=內(nèi)
23、燃機(jī)氣缸的工作容積,foreign=是否進(jìn)口車(0代表是國(guó)產(chǎn)車)。實(shí)驗(yàn)操作指導(dǎo)實(shí)驗(yàn)操作指導(dǎo)1 程序的定義程序的定義定義程序的基本命令為:program define program_name , nclass| rclass| eclass | sclass byable(recall , noheader| onecall) properties(namelist) sortpreserve plugin這里,program define是定義程序的基本命令,其中,define可以省略(所有中括號(hào)內(nèi)的內(nèi)容都是可選項(xiàng))。program_name是程序名。選項(xiàng)nclass是默認(rèn)選項(xiàng),用于表明程序
24、的類型,該選項(xiàng)表示程序不保存任何結(jié)果;rclass、eclass和 sclass分別表示程序結(jié)果保存在r()、e()和s()中。選項(xiàng)byable()表示程序在運(yùn)用時(shí)允許“by: varlist”前綴,而默認(rèn)情況下這是不允許的。byable()主要有兩種運(yùn)用形式:by(recall)和by(onecall)。其中,by(recall)最為常用。需要注意的是,如果程序中有生成新變量(指永久變量而非臨時(shí)變量),或者沒使用marksample或mark(該命令的講解見后面)來限制相關(guān)的子樣本,則僅僅使用選項(xiàng)by(recall)是不恰當(dāng)?shù)?。了解by(recall)的作用機(jī)理會(huì)有助于我們理解這一點(diǎn):如果程
25、序在運(yùn)用時(shí)使用了“by: varlist”前綴,程序會(huì)被執(zhí)行k次(k是分組變量varlist的類別數(shù));而每次運(yùn)行時(shí),marksample會(huì)標(biāo)記出不屬于當(dāng)前組的觀測(cè)值。因此,如果程序中有生成永久變量,則第一次運(yùn)行時(shí)就會(huì)生成,而第二次再運(yùn)行時(shí),因?yàn)橄鄳?yīng)的變量已經(jīng)存在,故會(huì)出錯(cuò)。而如果沒有用marksample來標(biāo)記相關(guān)樣本,會(huì)導(dǎo)致過多的觀測(cè)值被使用,也會(huì)出錯(cuò)。by(onecall)的主要作用是用于像“generate”和“egen”這一類的程序,它運(yùn)行前綴by,但作用于所有數(shù)據(jù),且生成一個(gè)變量來保存不同組的結(jié)果。如其名字所暗示的,這類程序只執(zhí)行一次。properties()表示程序的特征,比如運(yùn)
26、行stepwise或svy前綴。sortpreserve表示程序會(huì)改變數(shù)據(jù)的排序,但程序結(jié)束時(shí),就恢復(fù)初始順序。該選項(xiàng)會(huì)使Stata在程序開始時(shí)通過臨時(shí)變量_sortindex記錄當(dāng)前數(shù)據(jù)排序情況,并在程序結(jié)束時(shí)通過該變量恢復(fù)數(shù)據(jù)的排序。這樣,即便程序中使用命令“sort”對(duì)數(shù)據(jù)進(jìn)行了重新排序,程序結(jié)束時(shí)數(shù)據(jù)也會(huì)恢復(fù)初始的順序。需要注意的一點(diǎn)是,必須保證臨時(shí)變量_sortindex在程序結(jié)束時(shí)還存在,這樣,程序才能恢復(fù)原來的排序。因而,如果程序結(jié)尾處有這樣的命令:keep id varlist 我們應(yīng)修改為:keep id varlist _sortindex 此外,如果程序中還有preser
27、ve命令,則程序運(yùn)行結(jié)束后,會(huì)首先恢復(fù)到preserve所保存的狀態(tài),然后再恢復(fù)到sortpreserve所保存的狀態(tài)。最后,選項(xiàng)plugin表示動(dòng)態(tài)載入插件程序。程序的顯示和刪除程序的顯示和刪除顯示內(nèi)存中程序的命令為:program dir刪除內(nèi)存中程序的命令為:program drop program_name program_name | _all| _allado這里,program drop是刪除內(nèi)存中的程序的基本語(yǔ)句,program_name指要從內(nèi)存中刪除的程序名,_all表示刪除所有內(nèi)存中的程序,_allado表示刪除內(nèi)存中所有從ado文件加載的程序。顯示程序內(nèi)容的命令為:pr
28、ogram list program_name program_name | _all這里,program list是顯示程序內(nèi)容的基本語(yǔ)句,program_name指要顯示內(nèi)容的程序名,_all表示顯示所有內(nèi)存中的程序的內(nèi)容。3 變?cè)冊(cè)行r(shí)候,我們需要在程序中使用某些變量。這些變量從外界輸入,并且在每次運(yùn)行程序時(shí)可以進(jìn)行修改。定義并命名變?cè)詈?jiǎn)單的方式是使用args命令,定義之后,變?cè)槐4娴骄植亢曛小O旅?,我們通過一個(gè)簡(jiǎn)單的程序來說明該命令的應(yīng)用。程序?yàn)椋簆rogram argexampargs arg1 arg2 arg3 arg4display “The 1st argument
29、 is: arg1”display “The 2nd argument is: arg2”display “The 3rd argument is: arg3”display “The 4th argument is: arg4”end這里,我們定義了四個(gè)變?cè)?,arg1、arg2、arg3和arg4;定義之后,它們被傳遞到局部宏arg1、 arg2、 arg3和arg4之中,并在后面的命令中被引用。在執(zhí)行程序時(shí),在程序名之后依次輸入各變?cè)膬?nèi)容就可以。下面,我們運(yùn)行程序。輸入命令:argexamp this is an argument如果我們輸入以下命令:argexamp “this is
30、an argument”則字符串“this is an argument”就被看做是一個(gè)變?cè)膬?nèi)容。此外,即便我們不通過命令args來定義變?cè)部梢灾苯釉谶\(yùn)行程序時(shí),于程序名后面寫上各變?cè)膬?nèi)容。這時(shí),Stata將依次把各變?cè)膬?nèi)容傳遞到局部宏1、2等之中,而且,宏0會(huì)按照用戶輸入的形式來保存所輸入的內(nèi)容(包括引號(hào)等),宏*則相當(dāng)于將宏1、2等依次排列,且兩兩之間有一個(gè)空格。但這樣的一個(gè)缺點(diǎn)是,變?cè)暮x往往不夠明確,程序的可讀性比較低。事實(shí)上,在用args命令之后,Stata不過把局部宏1、2的內(nèi)容又傳遞到args新定義的變?cè)?;而這時(shí),我們?nèi)钥稍诔绦蛑型ㄟ^局部宏1、2等來引用相應(yīng)的變量
31、。最后,如果在執(zhí)行程序時(shí),命令后面的變?cè)獋€(gè)數(shù)多于args定義的變?cè)膫€(gè)數(shù),我們可以通過數(shù)字形式的宏來引用多出來變?cè)? 語(yǔ)法語(yǔ)法通過在程序中設(shè)置命令的語(yǔ)法(syntax)格式,我們可以不必設(shè)定變?cè)?,直接按照語(yǔ)法來使用該程序即可。標(biāo)準(zhǔn)的語(yǔ)法格式為:by varlist: command varlist =exp using filename if in weight , options這里,by varlist表示按照變量varlist的類別分別運(yùn)行命令,command表示命令的名稱(即程序名),varlist代表命令中的變量,=exp表示運(yùn)算表達(dá)式,using filename使用數(shù)據(jù)文件fi
32、lename,if代表?xiàng)l件語(yǔ)句,in代表范圍語(yǔ)句,weight代表權(quán)重語(yǔ)句,options代表其他選項(xiàng)。在寫語(yǔ)法時(shí),我們選取需要的部分進(jìn)行組合。也可以將某些項(xiàng)用中括號(hào)括起來,表明該內(nèi)容為可選項(xiàng);或者不使用中括號(hào),表明該項(xiàng)為必選項(xiàng)。但需要注意的一點(diǎn)是,在程序中寫語(yǔ)法之前,必須寫上命令snytax,表明該命令是語(yǔ)法格式。而by varlist和command則不必出現(xiàn)在syntax之后,它們是在運(yùn)行程序時(shí)使用的。另外,執(zhí)行程序時(shí),語(yǔ)法中各項(xiàng)內(nèi)容都會(huì)被保存在相應(yīng)的宏中。例如,條件語(yǔ)句會(huì)被保存在宏if中,范圍語(yǔ)句會(huì)被保存在宏in中,等等。下面,我們對(duì)語(yǔ)法格式中的幾項(xiàng)做進(jìn)一步的說明。對(duì)于varlist,
33、我們可以進(jìn)行多種形式的設(shè)置。例如:syntax varlist 表示執(zhí)行程序時(shí),變量名varlist必須設(shè)置syntax varlist 表示變量名varlist為可選項(xiàng)syntax varlist (default=none) 設(shè)置默認(rèn)的變量個(gè)數(shù)為0syntax varlist (min=3) 表示變量varlist必須設(shè)置,且最少要有3個(gè)syntax varlist (min=2 max=5 numeric) 表示變量varlist最少要有2個(gè),最多有5個(gè),且必須為數(shù)值型。括號(hào)中還可設(shè)定:string=只允許字符變量,ts=允許時(shí)間序列算子等。syntax varname 只允許設(shè)置一個(gè)變
34、量,且該變量為可選項(xiàng)對(duì)于varlist的位置,我們也可以設(shè)置為newvarlist或newvarname,表明生成新變量。此外,如果設(shè)置為namelist或name,表明輸入的對(duì)象可以不是變量名。要想進(jìn)一步放寬要求,還可采用anything,這時(shí),在命令后輸入表達(dá)式或一串?dāng)?shù)字等都沒有關(guān)系。最后,如果不設(shè)定varlist,則該程序命令會(huì)不允許輸入變量。此外,對(duì)于語(yǔ)法格式的選項(xiàng)weight,它必須用中括號(hào)括起來,因?yàn)閣eight永遠(yuǎn)是可選項(xiàng)。此外,我們可以設(shè)定多種權(quán)重形式,包括fweight、aweight、pweight和iweight。例如,我們可以設(shè)定:syntax fweight pwei
35、ght 表明fweight和pweight是可選的。下面,我們定義一個(gè)包含語(yǔ)法的程序,來對(duì)前面的講解做進(jìn)一步的說明。program mysynsyntax varlist(min=1) if in , title(string) *設(shè)定變量名為必選項(xiàng),且至少要有一個(gè)變量,if、in、title()為可選項(xiàng)display “varlist contains |varlist|” *顯示字符串“varlist contains |變量名|”,變量名被保存在宏varlist中display if contains |if| *顯示字符串“if contains |條件語(yǔ)句|”,條件語(yǔ)句保存在宏if中
36、display in contains |in| display “ title contains |title|”end下面,在打開數(shù)據(jù)文件“usaauto.dta”的情況下,我們執(zhí)行這個(gè)程序。輸入命令:mysyn mpg weight length if foreign ,title(“my syntax”)這里,mysyn為命令名(即程序名),mpg、weight和length為變量,if foreign為條件語(yǔ)句,title()指標(biāo)題。mysyn后的各項(xiàng)即按照程序中指定的語(yǔ)法結(jié)構(gòu)所寫。5 標(biāo)記使用的觀測(cè)值標(biāo)記使用的觀測(cè)值有時(shí),我們需要對(duì)命令中使用的觀測(cè)值進(jìn)行標(biāo)記。例如,程序要對(duì)不包含缺
37、失值的觀測(cè)值計(jì)算統(tǒng)計(jì)量(例如線性回歸);或程序設(shè)定了條件語(yǔ)句、范圍語(yǔ)句等,需要確認(rèn)其所使用的觀測(cè)值。由于很多程序錯(cuò)誤產(chǎn)生于在程序的不同部分使用不同的樣本,因此,我們強(qiáng)烈建議在程序的開始處對(duì)樣本進(jìn)行標(biāo)記。Stata有專門的命令來生成標(biāo)記變量,對(duì)使用的觀測(cè)值進(jìn)行標(biāo)記。這種變量為臨時(shí)變量,取值為0或1;如果觀測(cè)值在隨后的編碼中被使用,則臨時(shí)變量取值為1,若未被使用,則取值為0。下面,我們對(duì)相關(guān)命令進(jìn)行介紹。(1)生成標(biāo)記變量在語(yǔ)法(syntax)命令之后生成標(biāo)記變量的命令格式為:marksample lmacname , novarlist strok zeroweight noby這里,marks
38、ample是生成標(biāo)記變量的基本格式;lmacname為局部宏的名字,該宏用于保存臨時(shí)變量的信息,如果某觀測(cè)值的標(biāo)記變量取值為1,就表示該觀測(cè)值在命令執(zhí)行中被使用;選項(xiàng)novarlist表示不排除包含缺失值的觀測(cè)值;strok表示varlist中的變量可以是字符串(string is OK);zeroweight表示不排除權(quán)重為0的觀測(cè)值;選項(xiàng)noby只有在程序設(shè)定了byable(recall)選項(xiàng)時(shí)才可以使用,它表示,在標(biāo)記樣本時(shí),分組限制被忽略也就是說,marksample會(huì)像未設(shè)定by前綴那樣來生成標(biāo)記變量。marksample的通常使用形式是這樣的:program syntax mark
39、sample touse rest of code if touseend這里,我們使用局部宏touse作為標(biāo)記變量;這是一種慣例,而非要求。但為了保持程序間的一致性,我們推薦使用該名字。此外,倒數(shù)第二行命令含義為,如果宏touse的值為1(即樣本被使用),則對(duì)其進(jìn)行相關(guān)的操作;“rest of code”指相應(yīng)的操作的命令。此外,我們?cè)趹?yīng)用該命令時(shí)可以生成多個(gè)標(biāo)記變量,分別為其設(shè)定不同的選項(xiàng),從而標(biāo)記不同的觀測(cè)值。(2)設(shè)定臨時(shí)變量為標(biāo)記變量如果我們已生成臨時(shí)變量,且要將觀測(cè)值是否被使用的信息保存到該臨時(shí)變量中,可使用如下的命令格式:mark newmarkvar if in weight
40、, zeroweight noby其中,mark是生成標(biāo)記變量的基本命令,newmarkvar是已生成的臨時(shí)變量的名稱,if代表?xiàng)l件語(yǔ)句,in代表范圍語(yǔ)句,weight代表權(quán)重語(yǔ)句。選項(xiàng)zeroweight和noby的含義與marksample處相同。需要說明的一點(diǎn)是,相比起marksample,該命令較少被使用。因?yàn)槿绻暗恼Z(yǔ)法中設(shè)定了條件語(yǔ)句等,mark命令也需要設(shè)定相應(yīng)的語(yǔ)句,且往往還要通過markout來設(shè)定varlist(見下一部分);而marksample可自動(dòng)完成這些,不容易有遺漏項(xiàng)。(3)調(diào)整標(biāo)記變量在命令mark或marksample之后,如果于varlist的變量之外又有
41、了新的變量,或者,如果varlist中變量包含缺失值的觀測(cè)值都要被排除掉(即令標(biāo)記變量為0),我們可使用如下命令:markout markvar varlist , strok sysmissokmarkout是調(diào)整標(biāo)記變量的基本命令,markvar是前面設(shè)定的標(biāo)記變量名稱,varlist代表相關(guān)的變量名,選項(xiàng)strok表示允許字符串變量。最后,選項(xiàng)sysmissok表示系統(tǒng)缺失值(.)是允許的,但擴(kuò)展缺失值(形如.a、.b等)會(huì)被排除;默認(rèn)是包含任何類型缺失值的樣本都會(huì)被排除。下面,我們給出一個(gè)同時(shí)利用mark命令和markout命令的例子:program myprogversion 10s
42、yntax varlist if intempvar tousemark touse if inmarkout touse varlistend這里,mark命令依據(jù)條件語(yǔ)句和范圍語(yǔ)句來生成臨時(shí)變量touse;而如果沒有條件語(yǔ)句或范圍語(yǔ)句,則每個(gè)觀測(cè)值的touse值都是1。之后,markout命令會(huì)對(duì)標(biāo)記變量進(jìn)行更新,對(duì)于touse值為1的變量,Stata會(huì)檢查varlist的值是否缺失,如果有缺失值,則將相應(yīng)觀測(cè)值的touse值修正為0。在后面的數(shù)據(jù)管理或統(tǒng)計(jì)量計(jì)算的命令中,加上條件語(yǔ)句“if touse”會(huì)將命令的執(zhí)行限制在合適的樣本之中。(4)標(biāo)記變量的適用規(guī)則不管使用的是marksam
43、ple還是mark,以及它們后面有沒有markout,如下的一些規(guī)則都適用:1.觀測(cè)值的權(quán)重為0時(shí),標(biāo)記變量被設(shè)定為0(設(shè)定選項(xiàng)zeroweight除外)。2.如果權(quán)重weight無效(像某些觀測(cè)值的權(quán)重小于0,或者頻率權(quán)重不是整數(shù)等),程序會(huì)被停止,且Stata會(huì)返回錯(cuò)誤信息。3.如果觀測(cè)值不滿足條件語(yǔ)句(if),則標(biāo)記變量被設(shè)為0。4.如果觀測(cè)值不滿足范圍語(yǔ)句(in),標(biāo)記變量被設(shè)為0。5.如果varlist中的任何一個(gè)數(shù)值變量包含數(shù)值缺失值,標(biāo)記變量的值為0。6.如果varlist中有變量為字符串型,則所有觀測(cè)值的標(biāo)記變量為0(設(shè)定選項(xiàng)strok除外)。7.其他情況,標(biāo)記變量的值為1。(
44、5)尋找選定觀測(cè)值的范圍尋找選定觀測(cè)值的范圍的基本命令為:markin if in , name(lclname) noby這里,markin是尋找選定觀測(cè)值范圍的基本命令,if為條件語(yǔ)句,in為范圍語(yǔ)句,選項(xiàng)name()用于指定新生成的局部宏的名字,如果不設(shè)定該選項(xiàng),名字in會(huì)被使用。命令markin用在marksample、mark或markout之后,且在使用時(shí)要很小心,因?yàn)樵撁钣肋h(yuǎn)都不是必須的。但如果我們知道,前面命令的條件語(yǔ)句將選取很多觀察值的一個(gè)很小的樣本(例如,從58000個(gè)中選10個(gè)),且這些觀測(cè)值的序號(hào)有比較接近,則使用markin命令能使程序執(zhí)行得更快。使用該命令的一種方
45、法是,先寫出一個(gè)不帶該命令的程序,然后在定義標(biāo)記變量之后,加入這樣的語(yǔ)句:markin if touse 并在后面所有使用if touse的命令后面(這里,我們假定標(biāo)記變量被命名為touse)同時(shí)加上in(假定沒有指定新的局部宏的名字)。6 輸入?yún)?shù)的解析輸入?yún)?shù)的解析如果想對(duì)宏進(jìn)行分解,獲取所需的部分,我們可以通過tokenize或gettoken命令來實(shí)現(xiàn)。相比起語(yǔ)法(syntax)命令,這種解析方式也被稱為低水平語(yǔ)法分析。下面,我們對(duì)這兩個(gè)命令分別進(jìn)行介紹。(1)tokenize通過tokenize將宏分解成幾部分的基本命令為:tokenize ” string “ , parse(“p
46、chars”)其中,tokenize是解析宏的基本命令,string代表要分解的宏的名稱,選項(xiàng)parse(“pchars”)表示用pchars作為各個(gè)部分的分隔符,默認(rèn)為空格。tokenize命令會(huì)將指定的宏分解為幾個(gè)記號(hào)(token),并依次將各部分保存在局部宏1、 2中。下面,我們通過一個(gè)例子來說明該命令的應(yīng)用。輸入命令:local str A strange+string (定義局部宏str)tokenize str, parse( +) (將str進(jìn)行分解,設(shè)定分隔符為空格和加號(hào))di 1=|1|, 2=|2|, 3=|3|, 4=|4|, 5=|5|, 6=|6| (顯示分解的各個(gè)部
47、分)我們得到如下的結(jié)果:1=|A|, 2=|strange|, 3=|+|, 4=|+|, 5=|string|, 6=|通過這個(gè)例子,我們可以看出,多個(gè)符號(hào)可以同時(shí)被用作分隔符(這里是空格和加號(hào));空格被用作分隔符時(shí)不會(huì)被保存在數(shù)值宏中,但其他字符被用作分隔符時(shí)會(huì)被保存在數(shù)值宏中(這里是宏3和4)。tokenize命令對(duì)于分解語(yǔ)法命令(syntax)輸入的參數(shù)很方便。例如,可能有如下的形式:program myprogversion 10syntax varlist if inmarksample tousetokenize varlist /對(duì)輸入的變量進(jìn)行分解local first 1
48、/將分解后的第一個(gè)變量的局部宏命名為firstmacro shift /宏轉(zhuǎn)移,即原來第i個(gè)宏現(xiàn)在變?yōu)榈趇-1個(gè)。local rest * /將剩余的宏命名為restend(2)gettokengettoken提供了解析輸入?yún)?shù)的另一途徑,其基本命令格式為:gettoken emname1 emname2 : emname3 , parse(pchars) quotes qed(lmacname) match(lmacname) bind其中,gettoken是解析參數(shù)的基本命令。選項(xiàng)parse(“pchars”)表示用pchars作為各個(gè)部分(記號(hào))的分隔符,pchars默認(rèn)為空格。該命令會(huì)
49、獲取宏emname3分隔符之前的記號(hào)(token),并將其存儲(chǔ)在宏emname1中。如果同時(shí)設(shè)定了宏emname2,則Stata會(huì)將剩下的記號(hào)存儲(chǔ)在宏emname2中。宏emname1和emname3,或者宏emname2和emname3,可以有相同的名字。宏emname可以有如下三種形式:macroname 局部宏(local) macroname 局部宏(global) macroname 全局宏對(duì)于其他的選項(xiàng),quotes表示宏emname1內(nèi)容的外引號(hào)被保留;該選項(xiàng)不影響宏emname2,因?yàn)樗偸潜A羝鋬?nèi)容的外引號(hào)。qed(lmacname)表示生成一個(gè)局部宏lmacname;如果返
50、回的記號(hào)(token)在初始字符串中為引號(hào)所包圍,則其值為1,否則為0。match(lmacname)表示,在決定記號(hào)時(shí),括號(hào)會(huì)被匹配;此外,在記號(hào)被存儲(chǔ)在宏emname1之前,括號(hào)會(huì)被移除;而如果有括號(hào),局部宏lmacname 的值為“(”,否則,就是空串。bind表示小括號(hào)()或中括號(hào)中的內(nèi)容會(huì)被當(dāng)做一個(gè)記號(hào),即便分隔符不是括號(hào)。通常情況下, gettoken命令的運(yùn)用方式是這樣的:gettoken emname1 : 0 , options或 gettoken emname1 0 : 0 , options這里,宏0包含了用戶所鍵入的內(nèi)容。第一種方式會(huì)將取出的第一個(gè)token保存到宏em
51、name1中;而第二種方式還會(huì)將剩下的部分再保存到宏0中。下面,我們通過一個(gè)交互式例子來進(jìn)一步加深對(duì)gettoken命令的理解。首先,我們定義一個(gè)局部宏str。輸入命令:local str panel+data time+series 這里,str的內(nèi)容為panel+data time+series。下面,我們對(duì)其進(jìn)行解析并顯示結(jié)果。輸入命令:gettoken left : strdisplay left這里,第一步我們對(duì)str進(jìn)行解析,以空格為分隔符,并將獲得的token放到宏left中。第二步顯示宏left的內(nèi)容。結(jié)果為:panel+data下面,我們來看一下宏str的內(nèi)容。輸入命令:di
52、splay str注意,我們?cè)诤阺tr之外用了復(fù)合雙引號(hào) 。這里,中間的雙引號(hào)為了表示字符串,是必須的;而外面的局部宏單引號(hào)不是必須的,但它能在一些情況下避免很多雙引號(hào)導(dǎo)致的配對(duì)混亂。上面命令的結(jié)果為:panel+data time+series可見,取出一個(gè)token之后,原序列沒有改變。下面,繼續(xù)對(duì)str進(jìn)行解析,并顯示結(jié)果。命令為:gettoken left str : str, parse( +) display left第一步中,我們以空格和加號(hào)為分隔符進(jìn)行解析,并將獲得的token放到宏left中,剩余的token還放到str中。第二步是顯示宏left的內(nèi)容。結(jié)果為:panel下面
53、,我們看一下宏str的內(nèi)容:display str 結(jié)果為:+data time+series也就是說,當(dāng)原序列的宏名稱和剩余符號(hào)的宏名稱相同時(shí),該宏的內(nèi)容會(huì)被更新為剩余符號(hào),即原來的字符串減去獲取的字符串之后的內(nèi)容。下面,我們對(duì)str繼續(xù)進(jìn)行解析,以空格和加號(hào)為分隔符,將獲得的token放到宏next中,剩余的token還放到str中g(shù)ettoken next str : str, parse( +)display next結(jié)果為:+也就是說,空格之外的分隔符也會(huì)被獲取,并保存到局部宏內(nèi)。最后,我們來看一下剩下的str的內(nèi)容:display str結(jié)果為:data time+series7
54、程序結(jié)果程序結(jié)果如我們本實(shí)驗(yàn)第一小節(jié)所講,保存結(jié)果的程序(或者說相應(yīng)的命令)可分為三種類型:r類、e類和s類。下面,我們分別對(duì)其進(jìn)行講解。(1)保存結(jié)果的程序類型簡(jiǎn)介1.r類命令,像summarize,其結(jié)果被保存在r()中。大部分命令都是r類命令。2.e類命令,像regress,其結(jié)果被保存在e()中。e類命令是Stata的模型估計(jì)命令。3.s類命令。其結(jié)果被保存在s()中。這類命令比較少見,有時(shí)在編程中會(huì)使用。在運(yùn)行完一個(gè)r類命令之后,我們可以輸入如下命令來看一下Stata保存的結(jié)果:return list類似地,運(yùn)行完一個(gè)e類命令后,如下命令可用來查看Stata保存的結(jié)果:ereturn
55、 list對(duì)于e類命令而言,用于估計(jì)的命令的名稱被保存在e(cmd)中。例如,OLS回歸之后,“regress”被保存在e(cmd)中。而完整的命令被保存在e(cmdline)中。例如,OLS回歸的完整命令為“regress mpg weight displ”,則e(cmdline)會(huì)返回“regress mpg weight displ”。估計(jì)中使用的觀測(cè)值個(gè)數(shù)被保存在e(N)中,而各觀測(cè)值是否在估計(jì)中被使用則被保存在e(sample)中。例如,輸入命令:summarize if e(sample)則我們會(huì)獲得估計(jì)值使用的各觀測(cè)值的描述統(tǒng)計(jì)量。系數(shù)向量和方差協(xié)方差矩陣分別被保存在e(b)和e
56、(V)中。要獲得系數(shù)及其標(biāo)準(zhǔn)差,可通過_bname和_sename,這里,name指變量名。其他保存在各命令e()結(jié)果中的標(biāo)量、宏或矩陣可參見相應(yīng)的命令說明。在命令窗口輸入:help 命令名我們將得到相應(yīng)命令的幫助文件,其中就列出了各個(gè)保存的結(jié)果。(2)將結(jié)果保存在r()此外,在編寫程序的過程中,我們也會(huì)希望將一些結(jié)果保存下來。而對(duì)于這三種類型的程序,保存結(jié)果的命令稍有不同。下面,我們進(jìn)行詳細(xì)的講解。在程序中,將結(jié)果保存在r()中的命令有:return scalar name = exp return local name return matrix name matname其中,第一種是保存
57、標(biāo)量(scalar),第二種是保存局部宏(local),第三種是保存矩陣(matrix)。例如,我們要編寫一個(gè)程序,匯報(bào)某變量的均值和標(biāo)準(zhǔn)差。我們可以寫出如下的一些命令:program meanse, rclass (令程序名為meanse,程序類型為r類)quietly summarize 1 (計(jì)算輸入的第一個(gè)變量的描述統(tǒng)計(jì)量,不顯示結(jié)果)local mean = r(mean) (將該變量的均值(r(mean))保存到局部宏mean中)local se = sqrt(r(Var)/r(N) (將該變量的標(biāo)準(zhǔn)差保存到局部宏se中)display mean = mean (顯示字符串“mea
58、n=”和局部宏mean的值)display SE of mean = se (顯示字符串“SE of mean=”和局部宏se的值)return scalar mean = mean (返回標(biāo)量mean,其值等于局部宏mean的值)return scalar se = se (返回標(biāo)量se,其值等于局部宏se的值)end可以將上面的程序輸入到命令窗口中,或保存到do或ado文件中去(若是保存到do文件中,需要先執(zhí)行do文件,然后才可以應(yīng)用命令)。然后,打開數(shù)據(jù)文件“usaauto.dta”,我們來看一下變量price的均值和標(biāo)準(zhǔn)差。輸入命令:meanse price下面,我們看一下該程序的返回
59、值。輸入命令:return list當(dāng)然,對(duì)于前面的程序,我們也可以不定義局部宏,而直接使用return命令。等價(jià)的程序?yàn)椋簆rogram mymeanse, rclassquietly summarize 1return scalar mean = r(mean)return scalar se = sqrt(r(Var)/r(N)display mean = return(mean)display SE of mean = return(se)end需要注意的是,程序內(nèi)容的最后兩行我們使用了return(mean)和return(se)。這里,函數(shù)return()和r()的含義是一樣的,但
60、Stata在程序的運(yùn)行過程中會(huì)將要返回的結(jié)果保存在return()中,而當(dāng)程序運(yùn)行結(jié)束后,才由return()傳遞到r()中。從而,在程序運(yùn)行過程中,如果要使用程序的返回值,應(yīng)使用函數(shù)return()而非r()。(3)將結(jié)果保存在e()將結(jié)果保存在e()中的命令為:ereturn scalar name = exp ereturn local name ereturn matrix name matname其中,第一種是保存標(biāo)量(scalar),第二種是保存局部宏(local),第三種是保存矩陣(matrix)。e類程序大多數(shù)地方都與r類程序類似,但也有幾點(diǎn)不同。在命令ereturn scal
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆河北省唐山市唐山第一中學(xué)高二物理第一學(xué)期期中統(tǒng)考模擬試題含解析
- 北京海淀外國(guó)語(yǔ)2025屆高三物理第一學(xué)期期末經(jīng)典試題含解析
- 2025屆云南省紅河州云南市蒙自一中高三物理第一學(xué)期期中達(dá)標(biāo)檢測(cè)模擬試題含解析
- 江蘇省南京師大蘇州實(shí)驗(yàn)學(xué)校2025屆高二物理第一學(xué)期期末達(dá)標(biāo)檢測(cè)試題含解析
- 2025屆云南省曲靖市宣威三中物理高三上期中統(tǒng)考試題含解析
- 2025屆上海市閘北區(qū)高一物理第一學(xué)期期末統(tǒng)考試題含解析
- 黑龍江齊齊哈爾市(2024年-2025年小學(xué)五年級(jí)語(yǔ)文)人教版開學(xué)考試(下學(xué)期)試卷及答案
- 情境二汽車玻璃裝飾課件
- 2024裝載機(jī)租聘合同范本
- 2024物業(yè)管理合同范本
- 醫(yī)院信息化建設(shè)項(xiàng)目驗(yàn)收方案
- 結(jié)構(gòu)加固施工方案說明范本
- 愛心助學(xué)基金會(huì)章程樣本
- 藥物性肝損傷的藥物治療
- Python繪圖庫(kù)Turtle詳解(含豐富示例)
- 靜脈采血技術(shù)靜脈采血圖片課件
- 2010年408真題及答案解析
- 【課題研究設(shè)計(jì)與論證報(bào)告】深度學(xué)習(xí)視角下幼兒園自主游戲支持策略的實(shí)踐研究
- 廚房設(shè)備及工具的使用培訓(xùn)
- 0~36個(gè)月兒童中醫(yī)藥健康管理服務(wù)
- 第三章藥物的化學(xué)結(jié)構(gòu)與藥代動(dòng)力
評(píng)論
0/150
提交評(píng)論