高級計量經濟分析及Stata應用 課件 第14章 Stata編程基礎_第1頁
高級計量經濟分析及Stata應用 課件 第14章 Stata編程基礎_第2頁
高級計量經濟分析及Stata應用 課件 第14章 Stata編程基礎_第3頁
高級計量經濟分析及Stata應用 課件 第14章 Stata編程基礎_第4頁
高級計量經濟分析及Stata應用 課件 第14章 Stata編程基礎_第5頁
已閱讀5頁,還剩77頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第14章Stata編程基礎第14章Stata編程基礎14.1基本工具14.2程序文件的基本格式14.3程序控制與循環命令14.4矩陣命令14.5Mata編程基礎2025/4/14214.1基本工具

14.1.1do文件和ado文件do文件、ado文件和程序文件是Stata命令的集合。do文件是收集存儲一個程序或腳本中的所有相關命令、擴展名為.do的文本文件??梢园幌盗械腟tata命令。do文件名不能包含空格,一般do文件需要和相關的輸入和輸出的文件都在同一個目錄中,并在這個目錄中執行Stata。查看或修改變換當前目錄路徑,可以使用命令cd。do文件創建do文件,可以點擊工具欄中的【新do-file編輯器】工具按鈕,也可以從【窗口】下拉菜單中,點擊打開一個新do文件??梢栽诿畲翱谥邪涯夸沜d轉變為存有do文件的目錄,然后執行do命令,即可執行一個已經編輯好的do文件;也可以先用工具欄中的【打開】工具按鈕,打開do文件,在do文件編輯器中,點擊運行工具按鈕,執行do文件。2025/4/144do文件編輯器2025/4/145do文件編輯do文件中可以用“*”標注程序命令的注釋;用書簽標注程序命令層次。點擊書簽工具按鈕,可以do文件中不同命令之間添加書簽,便于命令劃分層次段落。2025/4/146ado文件編好測試通過后把程序保存為擴展名為“.ado”的文件中,即為ado文件(automaticallydo),往后使用,直接輸入程序名就可以直接調用該程序運行。值得注意的是,ado文件的文件名必須與其中的程序名一致。2025/4/147do文件執行從do文件中執行程序的命令語法格式為:{do|run}filename[arguments][,nostop]可以使用Stata的do文件編輯器創建文件名(稱為do文件)。此文件將是標準文本文件。文件名也可以使用非Stata文本編輯器創建。確保以ASCII或UTF-8格式保存文件。如果指定的文件名沒有擴展名,默認是“.do”。如果路徑或文件名包含空格,則應該用雙引號括起來。菜單操作為:File>Do...do和run命令使Stata執行存儲在filename中的命令,就像它們是從鍵盤輸入的一樣。do在執行命令時回顯命令,而run是靜默的。2025/4/14814.1.2宏的定義與操作

宏(Macro)就是一串相關的字符串。宏分為全局宏和局部宏,用globe命令定義全局宏,用local命令定義局部宏。global將字符串指定給指定的全局宏名稱(mnames)。local將字符串指定給本地宏名稱(lclnames)。允許使用雙引號(“and”)和復合雙引號(′“and”′)。如果字符串有嵌入的引號,則需要復合雙引號。2025/4/14914.1.2宏的定義與操作tempvar為指定的本地宏名稱分配名稱,這些名稱可以用作數據集中的臨時變量名稱。當程序或do文件結束時,具有這些指定名稱的所有變量都將被刪除。tempname為指定的本地宏名稱指定名稱,這些名稱可以用作臨時本地宏、標量、矩陣或幀名稱。當程序或do文件結束時,所有具有這些指定名稱的本地宏、標量、矩陣或幀都將被刪除。tempfile為指定的本地宏名指定名稱,這些宏名可以用作臨時文件的名稱。當程序或do文件結束時,使用這些指定名稱創建的任何數據集都將被刪除。2025/4/141014.1.2宏的定義與操作宏操作分為全局宏和局部宏。其語法格式為:globalmname[=exp|:macro_fcn|"[string]"|`"[string]"']locallclname[=exp|:macro_fcn|"[string]"|`"[string]"']tempvarlclname[lclname[...]]tempnamelclname[lclname[...]]tempfilelclname[lclname[...]]local{++lclname|--lclname}2025/4/141114.1.2宏的定義與操作macrodirmacrodrop{mname[mname[...]]|mname*|_all}macrolist[mname[mname[...]]|_all]macroshift[#][...]`expansion_optr'[...]這里,`expansion_optr'可以是lclname|++lclname|lclname++|--lclname|lclname--|=exp|:macro_fcn|.class_directive|macval(lclname)。“macro_fcn”的可設定內容方式較多,為其中之一即可。2025/4/141214.1.3變量創建與操作

1.變量創建與操作的命令語法格式為:(1)創建新變量:generate[type]newvar[:lblname]=exp[if][in][,before(varname)|after(varname)](2)替換已有變量的內容replaceoldvar=exp[if][in][,nopromote](3)指定分配給新變量的默認存儲類型settype{float|double}[,permanently]這里,“type”可以是這些類型之一:byte|int|long|float|double|str|str1|str2|...|str2045。2025/4/141314.1.3變量創建與操作菜單操作為:(1)generate:Data>Createorchangedata>Createnewvariable(2)replace:Data>Createorchangedata>Changecontentsofvariable2025/4/1414例14.1變量創建與操作。

*下載數據.webusegenxmpl3*創建包含年齡平方值的新變量age2.generateage2=age^2*下載數據.webusegenxmpl1,clear*將年齡2中的值替換為年齡^2的值.replaceage2=age^22025/4/14152.新變量創建拓展egen[type]newvar=fcn(arguments)[if][in][,options]菜單操作:Data>Createorchangedata>Createnewvariable(extended)egen根據給定函數的參數創建一個新變量,該變量為可選指定的存儲類型,等于該函數的參數。這些函數是專門為egen編寫的,如下所述或由用戶編寫。2025/4/1416例14.2新變量創建(1)

*下載數據.clear.webuseegenxmpl*描述數據集.describe*創建包含膽固醇(cholesterol)平均值的變量.egenavg=mean(cholesterol)*創建包含平均膽固醇水平偏差的變量.generatedeviation=chol-avg2025/4/1417例14.3新變量創建(2)

*下載數據.webuseegenxmpl4,clear*創建包含每行a、b和c的行和的hsum.egenhsum=rowtotal(abc)*創建包含每行a、b和c的行平均值的havg.egenhavg=rowmean(abc)*創建包含每行a、b和c的行標準偏差的hstd.egenhsd=rowsd(abc)*創建hnonmiss,其中包含每行a、b和c的非缺失觀察數.egenhnonmiss=rownonmiss(abc)*創建hmiss,其中包含每行a、b和c的缺失觀察數.egenhmiss=rowmiss(abc)*顯示結果.list2025/4/14183.創建正交化變量orthog[varlist][if][in][weight],generate(newvarlist)[matrix(matname)]計算正交多項式的命令語法格式為:orthpolyvarname[if][in][weight],{generate(newvarlist)|poly(matname)}[degree(#)]其中,orthpoly要求指定generate(newvarlist)或poly(matname)或兩者。varlist可以包含時間序列操作符;見tsvarlist。權重允許設定iweights,aweights,fweights,andpweights。2025/4/1419例14.4正交化變量創建與計算正交多項式

*計算權重的正交多項式,并執行正交多項式回歸.sysuseauto,clear.orthpolyweight,deg(4)generate(pw*).regressmpgpw1-pw4

*通過poly()選項創建的矩陣P,可用于將正交多項式的系數轉換為自然多項式的系數.orthpolyweight,deg(4)poly(P).matrixb3=e(b)*P.matrixlistb32025/4/1420例14.4正交化變量創建與計算正交多項式

.gendoublew1=weight.gendoublew2=weight^2.gendoublew3=weight^3.gendoublew4=weight^4.regressmpgw1-w42025/4/142114.2程序文件的基本格式14.2.1程序的定義和操作14.2.2定義變量14.2.3定義語法格式14.2.4觀測值標記變量的使用與操作14.2.5結果保存與查看程序14.2.6程序舉例2025/4/142214.2.1程序的定義和操作

定義和操作程序(program)的Stata命令語法分別為:(1)定義程序:program[define]pgmname[,[nclass|rclass|eclass|sclass]byable(recall[,noheader]|onecall)properties(namelist)sortpreserveplugin](2)列出存儲在內存中的程序名:programdir(3)從內存中刪除程序:programdrop{pgmname[pgmname[...]]|_all|_allado}(4)列出程序內容:programlist[pgmname[pgmname[...]]|_all]2025/4/1423例14.5用program創建自編程序現在我們打開一個do文件。用program創建一個自編的程序:.programrng1.argsnab2.if"`b'"==""{3.display"Youmusttypethreearguments:nab"4.exit5.}6.drop_all7.setobs`n'8.generatex=(_n-1)/(_N-1)*(`b'-`a')+`a'9.end2025/4/142414.2.2定義變量Stata程序有兩種解釋用戶類型的方法:1.在位置上,指第一個參數、第二個參數等,或2.根據語法,如標準Stata語法。第一種方法是使用【args】命令定義變量。即按位置解析Stata語法的命令格式為:argsmacroname1[macroname2[macroname3...]]第一個參數分配給macroname1,第二個參數分配給macroname2,等等;在該程序中,您稍后可以通過將宏的名稱包含在單引號:`macroname1',`macroname2',…。2025/4/1425例14.6定義變量

.*重新定義自編程序argdisp.programargdisp1.version17.02.argsfirstsecondthird3.display"1stargument=`first'"4.display"2ndargument=`second'"5.display"3rdargument=`third'"6.end.*輸入三個參數,顯示.argdispcatdogmouse1stargument=cat2ndargument=dog3rdargument=mouse

2025/4/1426例14.6定義變量.*輸入三個參數值,計算.argdisp3.4562+5-12X*3+cat1stargument=3.4562ndargument=2+5-123rdargument=X*3+cat2025/4/142714.2.3定義語法格式第二種方法就是使用【syntax】命令定義語法格式。即根據標準語法結構分析語法:syntaxdescription_of_syntax比如,定義新命令myprog的語法格式為:myprogvarname[,dof(#)beta(#)]方括號“[]”表示該元素可以省略。就可以自編程序:programmyprogversion17.0syntaxvarlist[if][in][,DOF(integer50)Beta(real1.0)](程序的其余部分將按照`varlist',`if',`in',`dof',and`beta')…end2025/4/1428標準的Stata語法格式cmd[varlist|namelist|anything][if][in][usingfilename][=exp][weight][,options]2025/4/1429例14.7自編含語法定義的myprog程序.programmyprog1.version17.02.syntaxvarlist[if][in][,adjust(real1)title(string)]3.display"varlistcontains|`varlist'|"4.display"ifcontains|`if'|"5.display"incontains|`in'|"6.display"adjustcontains|`adjust'|"7.display"titlecontains|`title'|"8.end*打開數據文件usaauto.dta的情況下,執行mysyn程序,則輸入命令:

.myprog2025/4/1430例14.8定義程序.programmysyn.syntaxvarlist(min=1)[if][in][,title(string)]*設定變量名為必選項,且至少一個變量,if、in、title()為可選項.display"varlistcontains|'varlist'|"*顯示字符串“varlistcontains|變量名|”,變量名保存在宏'varlist'中.display"ifcontains|`if'|"*顯示字符串"ifcontains|條件語句|",條件語句保存在宏‘if’中.display"incontains|`in'|"*顯示字符串"incontains|范圍語句|",范圍語句保存在宏‘in’中.display"titlecontains|`title'|"*顯示字符串"titlecontains|標題語句|",標題語句保存在宏‘title’中.end2025/4/143114.2.4觀測值標記變量的使用與操作

Stata有專門的命令生成標記變量,對使用的觀測值進行標記。這種變量為臨時變量,取值為0或者1。如果觀測值在隨后的編碼中被使用,則臨時變量取值為1,如果沒有被使用,則取之為0。marksample、mark和markout用于Stata程序。markin是在marksample、mark和markout之后使用的,有時還提供了一種更有效的觀察編碼,以便在后續代碼中使用。在syntax(語法)命令后生成標記變量,其命令語法格式為:marksamplelmacname[,novarliststrokzeroweightnoby]2025/4/143214.2.4觀測值標記變量的使用與操作創建標記變量,其命令語法格式為:marknewmarkvar[if][in][weight][,zeroweightnoby]修改標記變量,其命令語法格式為:markoutmarkvar[varlist][,stroksysmissok]查找包含選定觀測值的范圍,其命令語法格式為:markin[if][in][,name(lclname)noby]基于調查特征變量修改標記變量,其命令語法格式為:svymarkoutmarkvar2025/4/143314.2.5結果保存與查看程序要保存結果的命令程序,可以分為三種類型:(1)r類命令:如summarize,其結果被保存在r()中。大部分命令都是r類命令。(2)e類命令:如regress,其結果被保存在e()中。e類命令是Stata軟件的模型估計命令。(3)s類命令:其結果保存在s()中,這類命令使用較少,有時編程中會使用。2025/4/1434r類命令在程序中,把結果保存在r()中的命令有:returnscalarname=expreturnlocalname=expreturnmatrixname[=]matname[,copy]其中,第一個命令保存標量(scalar),第2章保存局部宏(local),第3章保存矩陣(matrix)。在運行完一個r類命令,可以輸入如下命令,查看Stata軟件保存的結果:returnlist例14.9編寫程序2025/4/1435e類命令對于e類命令而言,估計的命令名稱保存在e(cmd)中,完整的命令保存在e(cmdline)中。e類程序的最后一行一定是如下命令:ereturnlocalcmd“cmdname”把程序名保存到e(cmd)中,只有輸入這句命令,Stata軟件才會認為保存結果是完整的。例14.10返回結果例14.11e類命令結果的保存查看2025/4/143614.2.6程序舉例

例14.12編寫多元回歸程序2025/4/143714.3程序控制與循環命令

Stata常用的條件控制命令主要是if命令。循環命令結構有:(1)foreach命令,在一個變量名稱列表或數字列表中的不同項之間構造循環。(2)forvalues命令,在數字的連續值之間構造循環迭代。

(3)While命令,循環持續到用戶指定的條件不能被滿足時為止。(4)continue命令,可以繼續執行過早暫停執行的當前循環迭代命令。2025/4/143814.3.1if條件命令

if條件控制編程命令的語法格式為:ifexp{multiple_commands}else{multiple_commands}或者ifexpsingle_commandelsesingle_command2025/4/143914.3.1if條件命令典型應用1:program...syntaxvarlist[,Report]...if"`report'"!=""{(logicfordoingtheoptionalreport)}...end2025/4/144014.3.1if條件命令典型應用2:當操作包含“++”或“--”宏展開運算符時,不要使用if和else的單行形式,也不要忽略大括號。例如,要編寫代碼:if(...){somecommand`++i'

}if條件命令通常用于do文件和程序中。2025/4/1441例14.13if條件命令

讓我們編寫一個程序來計算變量x的Tukey“冪”函數:programpowerif`2'>0{generatez=`1'^`2'(計算z的值)labelvariablez"`1'^`2'"(為變量z加上標簽)}elseif`2'==0{generatez=log(`1')labelvariablez"log(`1')"}else{generatez=-(`1'^(`2'))labelvariablez"-`1'^(`2')"}end這個程序有兩個參數。第一個參數是現有變量x的名稱。第二個參數是一個數字,我們稱之為n。程序創建新變量z。如果n>0,z是xn;如果n=0,則z為logx;如果n<0,z是-xn。2025/4/144214.3.2while循環命令

while循環命令的語法格式為:whileexp{stata_commands}while循環命令計算exp,如果表達式exp的值為真(非零),則執行大括號中的stata_命令。然后重復該過程,直到exp的計算結果為假(零)。while可以嵌套在while中。如果exp指的是任何變量,除非指定了明確的下標,否則將使用它們在第一次觀察中的值。foreach和forvalues命令是while的替代命令。大括號中的stata命令可以執行一次、多次,或者根本不執行。2025/4/1443例14.14while循環命令

.programdemo1.locali=`1'2.while`i'>0{3.display"iisnow`i'"4.locali=`i'-15.}6.display"done"7.end

.demo2iisnow2iisnow1done

.demo0done2025/4/144414.3.3foreach循環命令

foreach循環命令按照每個條目進行循環,其基本命令語法格式為:foreachlname{in|oflisttype}list{commandsreferringto`lname'}foreach反復為list中的每個元素設置本地宏lname,并執行大括號中的命令。循環執行零次或多次;如果list為null或空,則執行零次。2025/4/144514.3.3foreach循環命令具體使用形式說明如下:

(1)foreachlnameinlist{...}允許一個常規列表。元素之間用一個或多個空格隔開。(2)foreachlnameoflocallist{...}andforeachlnameofgloballist{...}從指定位置獲取列表。這種使用foreach的方法產生執行速度最快的代碼。(3)foreachlnameofvarlistlist{...},foreachlnameofnewlistlist{...},andforeachlnameofnumlistlist{...}很像foreachlnameinlist{...},除非對清單進行了適當的解釋。例如,foreachxinmpgweight-turn{...}有兩個元素,mpg和weightturn,因此循環將執行兩次。foreachxofvarlistmpgweight-turn{...}有四個元素,mpg、weight、length和turn,因為list是varlist的解釋。2025/4/144614.3.3foreach循環命令(4)foreachlnameofvarlistlist{...}給出變量列表的解釋。根據標準變量縮寫規則展開列表,并確認變量的存在。(5)foreachlnameofnewlistlist{...}指示列表將被解釋為新變量名;執行檢查以查看是否可以創建命名變量,但不會自動創建它們。(6)foreachlnameofnumlistlist{...}表示數字列表,并允許使用標準數字列表表示法。2025/4/1447例14.15foreach循環命令

foreachfileinthis.dtathat.dtatheother.dta{appendusing"`file'"}

*生成服從均勻分布的5個變量foreachvarofnewlistz1-z4{generate`var'=runiform()}

*數字1到4、8和103列表,循環生成.foreachnumofnumlist1/48103{display`num'}2025/4/144814.3.4forvalues循環命令

forvalues循環命令為范圍(range)的每個元素設置本地宏lname,并執行大括號中的命令。循環執行零次或多次。forvalues是為lname的不同數值執行代碼塊的最快方法。其語法格式為:forvalueslname=range{Statacommandsreferringto`lname'}其中,lname是局部宏的名稱,用于存儲每次循環的數值,range為數值的范圍,2025/4/1449例14.16forvalues循環命令

輸入如下命令:*生成100個統一的隨機變量x1,x2,…,x100。forvaluesi=1(1)100{generatex`i'=runiform()}

*為變量x5、x10等生成單獨的匯總統計命令x5,x10,…x300。forvaluesk=510to300{summarizex`k'}2025/4/145014.3.5跳出循環continue命令

foreach、forvalues或while循環中的continue命令可以中斷當前循環迭代的執行,并跳過循環中的其余命令。其語法格式為:continue[,break]這里,選項break為可選項,默認情況下,continue命令為略過當前循環的剩余命令,并開始下一次循環,但如果設定了選項break,程序就會直接執行循環后面的命令。2025/4/1451例14.17continue命令

.forvaluesx=1(1)4{2.ifmod(`x',2){3.display"`x'isodd"4.continue5.}6.display"`x'iseven"7.}1isodd2iseven3isodd4iseven2025/4/145214.4矩陣命令

14.4.1標量與矩陣14.4.2矩陣的輸入與輸出14.4.3矩陣的下標和合并14.4.4矩陣運算14.4.5矩陣函數14.4.6矩陣累乘命令2025/4/145314.4.1標量與矩陣

一個標量可以存儲單個數字或字符串,可以用display命令,顯示一個標量的內容。矩陣在Stata中有兩種使用方法,一種是使用帶有前綴matrix的Stata命令;一種是矩陣編程語言Mata。手動輸入矩陣使用matrixdefine命令,可以輸入矩陣的元素,行元素默認名稱為r1,r2,…,行元素之間用反斜線“\”隔開,列元素名稱默認為c1,c2,…,列元素之間用逗號“,”隔開。如:.matrixdefineA=(1,2,3\4,5,6).matrixlistA2025/4/145414.4.1標量與矩陣矩陣命名的命令為matname,行和列元素名稱修改的命令分別是matrixrowname和matrixcolname。也可以把存入e()或r()中的Stata估計結果中輸入矩陣。如,存儲在e(V)中的方差矩陣,列示內容:.matrixvbols=e(V).matrixlistvbols在語法圖中,大寫字母A,B,…,Z代表矩陣名稱。矩陣命令主要是加前綴matrix的矩陣操作命令。除了矩陣命令之外,Stata還有一種完整的矩陣編程語言Mata,它提供了更高級的矩陣函數、對復雜矩陣的支持、快速的執行速度,以及直接訪問Stata數據、宏、矩陣和返回結果的能力。Mata可以作為矩陣計算器交互使用,但它對編程更有用。2025/4/145514.4.2矩陣的輸入與輸出

例14.18矩陣的輸入輸出.*手動輸入矩陣.matrixinputmymat=(1,2\3,4).matrixlistmymat從stata結果中輸入矩陣。用存入e()或r()中的stata命令實現結果所產生的矩陣,構建新矩陣。如:matrixvbols=e(V)2025/4/145614.4.3矩陣的下標和合并

矩陣的下標在方括號中表示出來,矩陣的第(i,j)個元素表示為[i,j]。如果行或者列有名稱,也可以選用這個名稱。要對一個矩陣添加或追加一些行,使用垂直連接算子“\”;要對一個矩陣條件一些列,使用水平連接算子“,”。例如:.matrixB=mymat\X.matrixlistB2025/4/145714.4.4矩陣運算

矩陣算子有:+(加)、-(減)、*(乘)、#(Kronecker乘積)、/(除)、“′”(矩陣轉置)。另外,乘法命令可以用于與標量相乘,如2*A,或A*2,標量除法也是可行的,比如,A/2。要計算A′A,使用A′*A。2025/4/1458例14.19矩陣運算

.matrixE=C+3*C.matrixlistE

E[4,3]c1c2c1r1486.8r2121611.72186-2021012122025/4/145914.4.5矩陣函數

矩陣函數使用括號“()”定義。生成標量的矩陣函數包括:colsof(A)、det(A)、rowof(A)及trace(A)。生成矩陣的函數有:cholesky(A)、corr(A)、diag(A)、hadmard(A,B)、I(n)(A)、inv(A)、insym(A)、vec(A)、vecdiag(A)。匯總如表所示。2025/4/146014.4.5矩陣函數2025/4/146114.4.5矩陣函數2025/4/1462例14.20矩陣函數計算。

矩陣函數計算命令及運行結果如下:.matrixmyid=I(3).matrixlistmyid

symmetricmyid[3,3]c1c2c3r11r201r3001

.matrixnew=J(2,3,0).matrixlistnew

new[2,3]c1c2c3r1000r20002025/4/146314.4.6矩陣累乘命令

矩陣累積命令能夠計算各變量之間的交叉乘積并將結果返回到Stata矩陣中。命令語法格式為:(1)累加叉積矩陣以形成X'XmatrixaccumA=varlist[if][in][weight][,noconstantdeviationsmeans(M)absorb(varname)](2)累加叉積矩陣,形成X'BXmatrixglsaccumA=varlist[if][in][weight],group(groupvar)glsmat(W|stringvar)row(rowvar)[noconstant](3)累加叉積矩陣以形成和[(X_i)'e_i(e_i)'X_i]matrixopaccumA=varlist[if][in],group(groupvar)opvar(opvar)[noconstant](4)根據剩余變量累加第一個變量matrixvecaccuma=varlist[if][in][weight][,noconstant]2025/4/146414.4.6矩陣累乘命令2025/4/1465比如,matrixaccmA=v1v2生成一個矩陣A=Z’Z

,其中Z是一個N×3維的矩陣,其各列為變量v1和v2及accm自動追加的元素為1的單位列;matrixvecaccumA=wv1v2生成一個1×3階的行向量A=w’Z矩陣,其中,w是一個N×1階的列向量,該列為變量w,Z是一個N×3階的矩陣,其各列為變量v1和v2及accm自動追加的元素為1的單位列,除非使用了noconstant選項。matrixglsacum命令構造一個形式為XB’X的加權交叉乘積。如需把數據輸入到Stata矩陣中,進行矩陣計算,建議使用Stata軟件中的Mata語言編程。Mata語言是Stata軟件中的一個可以自我運行的組成成分。Stata函數可以與Mata函數結合使用。例14.21Stata函數與Mata函數結合使用.clear.sysuseauto(1978automobiledata).matrixaccumA=priceweightmpg(obs=74).matrixlistA

.matrixaccumCov=priceweightmpg,deviationsnoconstant(obs=74).matrixCov=Cov/(r(N)-1).matrixlistCov2025/4/146614.5Mata編程基礎14.5.1Mata使用基本14.5.2Mata矩陣命令14.5.3Mata的矩陣算子14.5.4Mata矩陣計算函數14.5.5Mata編程基礎14.5.6Mata編程語言14.5.7Mata編程示例2025/4/146714.5.1Mata使用基本

Mata命令通常在Mata中運行。要激活運行Mata,請在命令窗口中的Stata的點提示符下鍵入mata,然后按enter鍵;隨后直接輸入相關命令,要退出Mata,請在Mata的冒號提示符處鍵入end命令。在Mata命令前加上mata前綴,可以在stata中啟動一個單獨的mata命令。在Mata中使用Stata()函數可以在一個Mata程序中執行一個Stata命令。在Mata交互使用中,Mata不能包含注釋。Mata的help命令可以在Stata的點提示符下或者Mata的冒號提示符下運行。如查詢det函數,則輸入命令:helpmatadet2025/4/146814.5.2Mata矩陣命令

手動輸入矩陣,基本與Stata命令相同,用逗號“,”分割各列元素,用反斜線“\”分割各行。n×n的單位矩陣用I(n)命令創建。一個除了第i個元素以外的其他元素為0的1×n維向量用e(i,n)創建。一個各元素為v的r×c維常數矩陣用J(r,c,v)創建。范圍算子用于創建向量,該向量的元素依次增加1個單位。對于行向量,使用“a..b”,如:a=2..10;對于列向量,使用“a::b”,如:b=3::6。從Stata數據輸入矩陣,其命令語法格式為:voidst_view(V,realmatrixi,rowvectorj)voidst_view(V,realmatrixi,rowvectorj,scalarselectvar)voidst_sview(V,realmatrixi,rowvectorj)voidst_sview(V,realmatrixi,rowvectorj,scalarselectvar)2025/4/146914.5.2Mata矩陣命令從Stata矩陣輸入矩陣,使用Mata的st_matrix()函數,其語法格式為:realmatrixst_matrix(stringscalarname)stringmatrixst_matrixrowstripe(stringscalarname)stringmatrixst_matrixcolstripe(stringscalarname)voidst_matrix(stringscalarname,realmatrixX)voidst_matrix(stringscalarname,realmatrixX,stringscalarhcat)voidst_matrixrowstripe(stringscalarname,stringmatrixs)voidst_matrixcolstripe(stringscalarname,stringmatrixs)voidst_replacematrix(stringscalarname,realmatrixX)2025/4/147014.5.2Mata矩陣命令state的接口函數以“st_”開頭,可以把Mata中的矩陣和數據與Stata中的矩陣和數據連接起來。使用Mata的st_matrix()函數可以由Mata矩陣創建Stata矩陣。要在Stata中創建一個新變量并給這個新變量賦值,則要先輸入st_addvar(),再輸入st_store()函數。2025/4/147114.5.3Mata的矩陣算子可乘矩陣的算術算子有:“+”表示加,“-”表示減?!?”表示乘,“#”表示Kronecher乘積,乘法命令也可以用于標量相乘,如2*A,或者A*2。標量除法也是可以的,如A/2。標量可以升級到標量的冪運算,如a^2。矩陣-A是A的負?!?=”為恒等,“!=”為不等于,“>=”為大于等于,“<=”為小于等于,“&”為且運算,“|”為或運算。一個單撇號“′”表示矩陣的轉置。要計算A′A,輸入命令“A′A”或“A′*A”。矩陣元素對矩陣元素的算子是冒號算子,即在矩陣算術算子前加上冒號“:”,即為相應的元素冒號算子。相同維度矩陣的元素之間的乘積(即hadamard乘積),如C=A:*B。2025/4/147214.5.4Mata矩陣計算函數標準的矩陣函數的參數在括號“()”中給出。矩陣的行數函數(rows())、列數函數(col())、行列式函數(det())、秩函數(rank())、跡函數(trace())、統計函數(mean())等,可以生成標量。絕對值函數(abs())、符號函數(sign())、自然對數函數(ln())、冪指數(exp())、截取整數(trunc())等,及分布函數和密度函數等統計函數,可以通過元素轉換生成矩陣。2025/4/147314.5.4Mata矩陣計算函數一些矩陣命令可以作用與整個矩陣,生成向量和矩陣,如矩陣求逆函數、mean函數、corr函數等,使用Mata的eigensystem函數可以得到一個方陣的特征值和特征向量,其語法格式為:eigensystem(A,X,L,rcond,nobalance)計算一般的、實的或復的方陣A的特征向量和特征值。lefteigensystem(A,X,L,rcond,nobalance)鏡像了Egenesystem(),不同之處在于LeftEgenesystem()求解XA=diag(L)*X的左特征向量,而不是求解AX=X*diag(L)的右特征向量。2025/4/147414.5.4Mata矩陣計算函數例如,

:A=(1,2\9,4):X=.:L=.:eigensystem(A,X,L):X

:L

2025/4/147514.5.4Mata矩陣計

溫馨提示

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

評論

0/150

提交評論