




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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的文本文件。可以包含一系列的Stata命令。do文件名不能包含空格,一般do文件需要和相关的输入和输出的文件都在同一个目录中,并在这个目录中执行Stata。查看或修改变换当前目录路径,可以使用命令cd。do文件创建do文件,可以点击工具栏中的【新do-file编辑器】工具按钮,也可以从【窗口】下拉菜单中,点击打开一个新do文件。可以在命令窗口中把目录cd转变为存有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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业创业基金贷款合同6篇
- 2025年土方运输合同3篇
- 简单石材购货合同范本5篇
- 泥塑彩绘合同范本
- 仓库转租租赁合同范本
- 砂石料款合同范本
- 协议分红股权合同范本
- 新艺人签约合同范本
- 南京特种气体销售合同3篇
- 秋季学期工作计划表怎么写(5篇)
- GB/T 5162-2021金属粉末振实密度的测定
- GB/T 2820.4-2009往复式内燃机驱动的交流发电机组第4部分:控制装置和开关装置
- GB/T 12755-2008建筑用压型钢板
- GB 1886.45-2016食品安全国家标准食品添加剂氯化钙
- 26个英文字母(课堂PPT)
- 《生产与运作管理(第四版)》整套教学课件
- 无脊椎动物类群三腔肠动物门
- 生活离不开规则观课报告
- 硫化氢考试题库
- 监控中心主任岗位职责
- 住院医师规范化培训申请表
评论
0/150
提交评论