chap16STATA编程基础-PPT.ppt
《chap16STATA编程基础-PPT.ppt》由会员分享,可在线阅读,更多相关《chap16STATA编程基础-PPT.ppt(83页珍藏版)》请在咨信网上搜索。
1、第十六章第十六章 STATA编程基础编程基础主要内容基本概念与工具程序文件的基本格式程序控制语句实验实验16-1:基本概念与工具:基本概念与工具实验基本原理实验基本原理如果我们需要反复执行一些命令,就可以将相关命令存放在一个do文件中,然后保存并运行相应的do文件即可。相比起一遍一遍地输入命令,这种方式既方便又不容易出错。而另一些时候,我们会需要编写程序,从而能用一个命令来实现某种结果。一个程序应以program开头,以end结束。也就是说,应呈现如下的形式:program 程序名相应的命令end我们可以采取交互的方式定义程序(即,在Stata命令窗口中输入程序的各行命令),但实际应用中,程序
2、经常是被保存到一个do文件或ado文件中去,从而方便以后的应用。在程序或do文件中,我们可能需要加入注释,从而方便以后或他人的阅读。通常,我们还会声明版本,从而使得程序能够在以后更高版本的Stata中继续使用。此外,局部宏、全局宏、临时变量、临时矩阵和临时文件等也会经常被使用。实验内容及数据来源实验内容及数据来源本实验中,我们会讲解do文件的创建和执行方法、定界符的修改、程序和do文件的联系、ado文件的创建和保存、注释的添加方法、版本的声明、局部宏和全局宏的定义及引用以及临时变量、临时矩阵和临时文件的定义和使用等内容。本实验主要讲解编写程序的一些基本操作,不需要使用数据文件。实验操作指导实验
3、操作指导1 Do文件文件do文件是一种文本文件,其扩展名为“.do”。要创建一个do文件,可以通过菜单栏中Window的下拉选项Do-file Editor来打开Do文件编辑器,也可以直接点击工具栏的图标 。而要执行一个do文件,可以键入以下命令:do filename这里,filename指相应的do文件的文件名。但需要注意的一点是,这个filename.do文件需要放在当前目录下,只有这样,才可以不写文件的路径;否则,需要在文件名前写出完整路径(而如果路径中有中文字符,一定要将全部路径和文件名置于英文双引号之间)。要查看当前目录,我们可输入命令:cd当然,我们也可以先将当前目录更改到我们偏
4、好的一个文件夹下,然后再将do文件存放其中。例如,如下命令可以将当前目录更改到d盘data文件夹下:cd“D:data”这里,需要注意的一点是,cd命令要求其后的文件夹原来就存在。对于do文件中的命令,值得注意的是,每一行命令都需要结束于一个硬回车(包括最后一行);除非通过“#delimit”命令设置其他符号为换行符。例如,输入命令:#delimit.则我们设置以英文的句号作为换行符,也就是说,Stata只有遇到英文句号才会认为这一句命令结束。设置其他的换行符对于将很长的命令分成几行很有帮助,因为这时我们可以在想分行的地方输入回车符,而Stata又不会认为这是一句命令的结束。而如果我们想重新以
5、硬回车(carriage return)为换行符,可输入以下命令:#delimit cr2 Stata程序和程序和Do文件文件Stata处理程序和处理do文件的方式是一样的,包括参数的传递、结果的表达等。但do文件和程序也存在一些小的差别。例如,要激发一个do文件,我们需要键入“do filename”,而要激发一个程序,我们只需要键入程序名称就可以。此外,键入“do filename”之后,Stata会显示do文件中的命令以及执行结果;而键入程序名之后,Stata只会显示其执行结果。下面,我们重点讲一下,通常情况下,将程序放到do文件中去需要注意的问题。例如,我们编写了一个简单的程序:pro
6、gram exampdisplay“this is an example”end并把它保存到名为“examp.do”的文件中,且把文件置于当前目录下。下面,我们要执行这个do文件,就在Stata命令窗口输入如下的命令:do examp下面,我们再在命令窗口输入命令:examp也就是说,我们要执行程序examp。这时,Stata就会显示:this is an example在随后的时间里,我们如果还想显示“this is an example”,直接输入命令“examp”就可以。这里,我们展示了共同使用do文件和程序的一种方式,即,先在do文件中写出程序的命令并保存,再键入“do filenam
7、e”,然后就可以在随后的时间使用该程序命令了。当然,我们也可采取一种更为简洁的方式,即在do文件的最后一行加上程序名,这样,当键入“do filename”的时候,Stata就会在加载完程序后就执行程序。但需要注意的是,程序一旦被定义,Stata就不允许对其重新定义。这样,如果我们随后又输入一遍“do filename”,Stata就会显示错误提示。要解决这个问题,我们可以在do文件的第一行输入这样的命令:program drop 程序名这样,在定义该程序之前,如果内存中已有这个程序,我们会先将其从内存中删掉。但这种解决方案也存在一个问题:在打开Stata的期间第一次运行这个do文件,Stat
8、a会显示错误提示。因为这时还没有定义程序,所有没有办法将其删除。我们继续修正该命令为:capture program drop 文件名将命令“capture”置于其他命令之前,就表示无论该命令是否作用,Stata也不显示错误提示,且能继续执行下面的命令。事实上,在包含程序的do文件中,我们经常可以看到程序的定义之前有这样的命令。综合了以上几点,我们前面的do文件可以修改为这样的形式:capture program drop exampprogram exampdisplay“this is an example”endexamp这里,第一行先检查是否有已定义的examp程序,如果有就将其从内存
9、中删除。第二到四行是定义程序examp,最后一行是执行程序examp。3 Ado文件文件如果想自动加载并运行程序内容,我们可以将程序保存到ado(automatically do)文件中(同样是利用do文件编辑器,保存时选择扩展名为ado),以后,直接输入程序名就可以使用该程序。但需要注意的是,ado文件的文件名和其中的程序名必须一致。值得注意的是,如果在Stata运行的过程中改变了某个ado文件的命令语句,则在重新运行这个ado文件前,要先将Stata内存中的ado文件清除。即,输入命令:discard否则,Stata还是会运行原来的那个ado文件。个人编写的ado文件通常被存放在两个地方,
10、一个是当前目录,另一个是个人ado目录。个人ado目录通常位于“C:adopersonal”,要查看其具体位置,可输入命令:personal而要查看或改变当前目录,可使用命令“cd”。4 版本版本随着Stata版本的变化,相应的命令也会有些变化。这样,较早版本的命令可能就没法在现在的版本中使用,而现在的某些命令可能也没法在以后的版本中使用。为了让现在的程序能够在其他的版本中继续使用,我们可以在程序中声明所使用的版本;这样,在更新版本的Stata中运行这个程序,Stata就会做相应的调整,按当前版本的方式来翻译程序的命令。要声明版本,可输入命令:version 10.1这里,我们使用的是10.1
11、版的Stata。对于其他版本的Stata,在version后面输入相应的版本编号即可。5 注释注释有时,我们想在命令中加入注释,从而方便以后或他人的阅读。要在do文件或ado文件中加入注释,可以采取如下几种方式:1.以“*”来开始一行。这样,该行就会被当做注释。2.将注释放在“/*”和“*/”之间。该种格式可以置于句中的任何位置。此外,在行末使用“/*”,并在下一行行首使用“*/”,可以将很长的命令分成两行。3.将注释置于双斜线“/”之后。如果双斜线之前有命令,则双斜线与命令之间至少要有一个空格。4.将注释置于三斜线“/”之后。如果三斜线之前有命令,斜线与命令之间也是至少要有一个空格。此外,对
12、于“/”,其下一行的命令会被认为是前面命令的继续。三斜线也可单独置于行尾,从而将很长的命令分成几行。例如,我们可以写这样一段命令:*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此外,对于交互方式的命令,注释只可采取第
13、一种方式,即在句首加上“*”。6 宏宏宏是Stata程序的变量,它用一个字符串(宏的名称)来代表另一个字符串(宏的内容)。宏分为局部宏(local macro)和全局宏(global macro)。局部宏只属于其所定义的程序,不能从其他程序中调用。而全局宏一旦被定义,就会留在内存,且可以被其他程序使用。局部宏的名称最多有31个字符,它的定义方式为:local 宏的名称 宏的内容或:local 宏的名称=表达式例如,我们输入命令:local nv“this is a newvar”就定义了一个叫做nv的局部宏,其内容为this is a newvar。如果我们要引用这个局部宏的内容,其格式为:n
14、v。注意,左边的引号为标准键盘左上角的重音符(数字1左边的键),右边的引号为通常的单引号(回车键左边的键)。定义完毕之后,如果我们输入:nv我们就相当于输入了:this is a newvar例如,我们可以输入如下的命令来显示这个宏的内容:display“nv”注意,这里,宏nv外面的双引号必不可少,因为如果不加引号,我们相当于输入了如下的命令:display this is a newvarStata会显示错误提示:this not found。只有加上外面的双引号,才表示我们要显示一个字符串。否则,Stata会将其当做变量来处理。当然,如果宏的内容确实为存在的变量名,而我们要显示这个变量,
15、就不必加上双引号。对于定义局部宏的命令,宏内容上的引号可以省略。也就是说,我们在定义时,可以采用如下的命令:local nv this is a newvar这与前面是等价的。当然,加上引号能使命令的可读性更强。下面,我们来看一下定义宏的两种形式的区别。例如,对于如下两种形式:local one 3+2 或等价地,local one“3+2”local two=3+2第一种形式中,局部宏one的内容为字符串3+2;而第二种形式中,Stata会先计算表达式的结果(3+2=5),然后将5保存到宏two中。在第二种形式中,表达式可以是数值表达式或字符串表达式。这里,3+2是数值表达式(如果想令其为字
16、符串型,在外面加双引号就可以)。此外,局部宏(以及全局宏)可以组合使用。例如,局部宏i为数值6,宏x6 为字符newvar,则宏xi就指代字符newvar。另外,在组合时,我们可以通过大括号来设定运算的优先级。如果要清除一个局部宏,可将其内容设置为空。这可以通过如下三种方式实现:local macnamelocal macname local macname=这里,macname指宏的名称。而如果我们在程序中直接使用了一个没有被定义的宏,则Stata会将其当做一个内容为空的宏来处理。对于全局宏而言,其名字最多可以有32个字符长。全局宏的定义方法与局部宏类似,只需要将local改为global即
17、可。此外,引用全局宏时,在其名字前加上美元符号$。此外,即便程序中的全局宏和局部宏有相同的名称也没有关系,因为他们的引用方法不同,Stata可以将其区分。值得注意的一点是,如果我们要显示的内容第一个字符为美元符号,为了和全局宏进行区分,我们可以在该字符前加上反斜线。例如:display“$that”就表示要显示字符串$that,而不是全局宏that的内容。7 临时变量、临时矩阵和临时文件临时变量、临时矩阵和临时文件有些时候,程序在运行的过程中需要产生一些临时的变量、矩阵等,而一旦程序运行结束,这些变量、矩阵等就不再需要。这种情况下,我们可以生成临时变量等。生成临时变量的命令格式为:tempva
18、r var1 var2 这里,tempvar 是生成临时变量的基本命令,var1、var2代表临时变量的名称。确切地说,命令tempvar生成的是临时变量的名称,我们后面可以使用这些名称来生成临时变量;这些临时变量在程序结束时会被自动删掉。此外,tempvar生成的变量名被保存在局部宏内,在后面引用时需要加引号。临时变量的一个优点在于,即便内存中已存在相同名称的变量,我们也不必先将其删掉;这不会影响我们定义临时变量。例如,我们要定义并生成两个临时变量x和y(可能内存中已有变量是这个名称,但没有关系),可输入命令:tempvar x ygen x=gen y=这里,第一步是定义临时变量,第二步和
19、第三步是生成相应的临时变量。我们这里没有给出具体的表达式,因为这完全视具体情况而定。需要注意的是,在命令tempvar之后,我们引用临时变量时,都需要加上局部宏的引号。类似地,定义临时矩阵或临时标量的命令为:tempname ms1 ms2 这里,tempname 是定义临时矩阵或临时标量的基本命令,ms1、ms2等代表临时矩阵或临时变量的名称。同样地,定义临时文件的命令为:tempfile file1 file2 这里,tempfile是定义临时文件的基本命令,file1、file2代表临时文件的名称。例如,我们在程序中可能出现这样的命令:preserve /保存初始数据tempfile m
20、ales females /定义临时文件males和femaleskeep if sex=1 /*保留变量sex取值为1的观测值*/save males /*将这些观测值保存到临时文件male中*/restore,preserve /恢复原始数据keep if sex=0 /保留变量sex取值为0的观测值save females /将这些观测值保存到临时文件female中与临时变量相同,在程序结束时,Stata会自动删除临时矩阵、临时标量或临时文件。实验实验16-2:程序文件的基本格式:程序文件的基本格式实验基本原理实验基本原理在编写程序时,我们需要遵从一定的格式。基本的一种格式为:progr
21、am define 程序名,version#syntax end其中,第一行是定义程序,第二行是表明所用的Stata版本,第三行表明语法格式,后面是其他的一些命令,最后一行表明该程序结束。当然,version和syntax都不是必选项。但syntax等命令的应用在很多时候能使得程序的编写变得比较方便。而当我们不使用语法的时候,有时也会需要对输入的参数进行解析,这可以通过tokenize或gettoken命令来实现。此外,命令中使用的观测值有时需要被标记。例如,程序设定了条件语句、范围语句,需要确认其所使用的观测值等。由于很多程序错误产生于在程序的不同部分使用不同的样本,因此,我们强烈建议在程序
22、的开始处对样本进行标记。最后,很多程序需要保存一些结果,并且可以在运行程序时返回相应的结果。对于这些,我们也会进行讲解。实验内容及数据来源实验内容及数据来源本实验中,我们主要讲解程序的定义、程序的删除、程序内容的显示、变元的定义和引用、语法的定义、标记变量的生成和调整、输入参数的解析、结果的保存和返回等内容。本实验的部分命令会用到本书附带光盘data文件夹下的“usaauto.dta”工作文件。该文件给出了美国汽车产业的横截面数据,主要变量包括:price=汽车的价格,mpg=每加仑油所行驶的英里数,weight=汽车的重量,length=汽车长度,turn=转弯圆周,displacement
23、=内燃机气缸的工作容积,foreign=是否进口车(0代表是国产车)。实验操作指导实验操作指导1 程序的定义程序的定义定义程序的基本命令为:program define program_name,nclass|rclass|eclass|sclass byable(recall,noheader|onecall)properties(namelist)sortpreserve plugin这里,program define是定义程序的基本命令,其中,define可以省略(所有中括号内的内容都是可选项)。program_name是程序名。选项nclass是默认选项,用于表明程序的类型,该选项表示
24、程序不保存任何结果;rclass、eclass和 sclass分别表示程序结果保存在r()、e()和s()中。选项byable()表示程序在运用时允许“by:varlist”前缀,而默认情况下这是不允许的。byable()主要有两种运用形式:by(recall)和by(onecall)。其中,by(recall)最为常用。需要注意的是,如果程序中有生成新变量(指永久变量而非临时变量),或者没使用marksample或mark(该命令的讲解见后面)来限制相关的子样本,则仅仅使用选项by(recall)是不恰当的。了解by(recall)的作用机理会有助于我们理解这一点:如果程序在运用时使用了“b
25、y:varlist”前缀,程序会被执行k次(k是分组变量varlist的类别数);而每次运行时,marksample会标记出不属于当前组的观测值。因此,如果程序中有生成永久变量,则第一次运行时就会生成,而第二次再运行时,因为相应的变量已经存在,故会出错。而如果没有用marksample来标记相关样本,会导致过多的观测值被使用,也会出错。by(onecall)的主要作用是用于像“generate”和“egen”这一类的程序,它运行前缀by,但作用于所有数据,且生成一个变量来保存不同组的结果。如其名字所暗示的,这类程序只执行一次。properties()表示程序的特征,比如运行stepwise或s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- chap16STATA 编程 基础 PPT
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。