chap16-STATA编程基础.ppt
- 文档编号:958192
- 上传时间:2022-10-14
- 格式:PPT
- 页数:83
- 大小:807KB
chap16-STATA编程基础.ppt
《chap16-STATA编程基础.ppt》由会员分享,可在线阅读,更多相关《chap16-STATA编程基础.ppt(83页珍藏版)》请在冰豆网上搜索。
第十六章STATA编程基础,主要内容,基本概念与工具程序文件的基本格式程序控制语句,实验16-1:
基本概念与工具,实验基本原理如果我们需要反复执行一些命令,就可以将相关命令存放在一个do文件中,然后保存并运行相应的do文件即可。
相比起一遍一遍地输入命令,这种方式既方便又不容易出错。
而另一些时候,我们会需要编写程序,从而能用一个命令来实现某种结果。
一个程序应以program开头,以end结束。
也就是说,应呈现如下的形式:
program程序名相应的命令end我们可以采取交互的方式定义程序(即,在Stata命令窗口中输入程序的各行命令),但实际应用中,程序经常是被保存到一个do文件或ado文件中去,从而方便以后的应用。
在程序或do文件中,我们可能需要加入注释,从而方便以后或他人的阅读。
通常,我们还会声明版本,从而使得程序能够在以后更高版本的Stata中继续使用。
此外,局部宏、全局宏、临时变量、临时矩阵和临时文件等也会经常被使用。
实验内容及数据来源本实验中,我们会讲解do文件的创建和执行方法、定界符的修改、程序和do文件的联系、ado文件的创建和保存、注释的添加方法、版本的声明、局部宏和全局宏的定义及引用以及临时变量、临时矩阵和临时文件的定义和使用等内容。
本实验主要讲解编写程序的一些基本操作,不需要使用数据文件。
实验操作指导1Do文件do文件是一种文本文件,其扩展名为“.do”。
要创建一个do文件,可以通过菜单栏中Window的下拉选项Do-fileEditor来打开Do文件编辑器,也可以直接点击工具栏的图标。
而要执行一个do文件,可以键入以下命令:
dofilename这里,filename指相应的do文件的文件名。
但需要注意的一点是,这个filename.do文件需要放在当前目录下,只有这样,才可以不写文件的路径;否则,需要在文件名前写出完整路径(而如果路径中有中文字符,一定要将全部路径和文件名置于英文双引号之间)。
要查看当前目录,我们可输入命令:
cd当然,我们也可以先将当前目录更改到我们偏好的一个文件夹下,然后再将do文件存放其中。
例如,如下命令可以将当前目录更改到d盘data文件夹下:
cd“D:
data”这里,需要注意的一点是,cd命令要求其后的文件夹原来就存在。
对于do文件中的命令,值得注意的是,每一行命令都需要结束于一个硬回车(包括最后一行);除非通过“#delimit”命令设置其他符号为换行符。
例如,输入命令:
#delimit.则我们设置以英文的句号作为换行符,也就是说,Stata只有遇到英文句号才会认为这一句命令结束。
设置其他的换行符对于将很长的命令分成几行很有帮助,因为这时我们可以在想分行的地方输入回车符,而Stata又不会认为这是一句命令的结束。
而如果我们想重新以硬回车(carriagereturn)为换行符,可输入以下命令:
#delimitcr,2Stata程序和Do文件Stata处理程序和处理do文件的方式是一样的,包括参数的传递、结果的表达等。
但do文件和程序也存在一些小的差别。
例如,要激发一个do文件,我们需要键入“dofilename”,而要激发一个程序,我们只需要键入程序名称就可以。
此外,键入“dofilename”之后,Stata会显示do文件中的命令以及执行结果;而键入程序名之后,Stata只会显示其执行结果。
下面,我们重点讲一下,通常情况下,将程序放到do文件中去需要注意的问题。
例如,我们编写了一个简单的程序:
programexampdisplay“thisisanexample”end并把它保存到名为“examp.do”的文件中,且把文件置于当前目录下。
下面,我们要执行这个do文件,就在Stata命令窗口输入如下的命令:
doexamp,下面,我们再在命令窗口输入命令:
examp也就是说,我们要执行程序examp。
这时,Stata就会显示:
thisisanexample在随后的时间里,我们如果还想显示“thisisanexample”,直接输入命令“examp”就可以。
这里,我们展示了共同使用do文件和程序的一种方式,即,先在do文件中写出程序的命令并保存,再键入“dofilename”,然后就可以在随后的时间使用该程序命令了。
当然,我们也可采取一种更为简洁的方式,即在do文件的最后一行加上程序名,这样,当键入“dofilename”的时候,Stata就会在加载完程序后就执行程序。
但需要注意的是,程序一旦被定义,Stata就不允许对其重新定义。
这样,如果我们随后又输入一遍“dofilename”,Stata就会显示错误提示。
要解决这个问题,我们可以在do文件的第一行输入这样的命令:
programdrop程序名这样,在定义该程序之前,如果内存中已有这个程序,我们会先将其从内存中删掉。
但这种解决方案也存在一个问题:
在打开Stata的期间第一次运行这个do文件,Stata会显示错误提示。
因为这时还没有定义程序,所有没有办法将其删除。
我们继续修正该命令为:
captureprogramdrop文件名将命令“capture”置于其他命令之前,就表示无论该命令是否作用,Stata也不显示错误提示,且能继续执行下面的命令。
事实上,在包含程序的do文件中,我们经常可以看到程序的定义之前有这样的命令。
综合了以上几点,我们前面的do文件可以修改为这样的形式:
captureprogramdropexampprogramexampdisplay“thisisanexample”endexamp这里,第一行先检查是否有已定义的examp程序,如果有就将其从内存中删除。
第二到四行是定义程序examp,最后一行是执行程序examp。
3Ado文件如果想自动加载并运行程序内容,我们可以将程序保存到ado(automaticallydo)文件中(同样是利用do文件编辑器,保存时选择扩展名为ado),以后,直接输入程序名就可以使用该程序。
但需要注意的是,ado文件的文件名和其中的程序名必须一致。
值得注意的是,如果在Stata运行的过程中改变了某个ado文件的命令语句,则在重新运行这个ado文件前,要先将Stata内存中的ado文件清除。
即,输入命令:
discard否则,Stata还是会运行原来的那个ado文件。
个人编写的ado文件通常被存放在两个地方,一个是当前目录,另一个是个人ado目录。
个人ado目录通常位于“C:
adopersonal”,要查看其具体位置,可输入命令:
personal而要查看或改变当前目录,可使用命令“cd”。
4版本随着Stata版本的变化,相应的命令也会有些变化。
这样,较早版本的命令可能就没法在现在的版本中使用,而现在的某些命令可能也没法在以后的版本中使用。
为了让现在的程序能够在其他的版本中继续使用,我们可以在程序中声明所使用的版本;这样,在更新版本的Stata中运行这个程序,Stata就会做相应的调整,按当前版本的方式来翻译程序的命令。
要声明版本,可输入命令:
version10.1这里,我们使用的是10.1版的Stata。
对于其他版本的Stata,在version后面输入相应的版本编号即可。
5注释有时,我们想在命令中加入注释,从而方便以后或他人的阅读。
要在do文件或ado文件中加入注释,可以采取如下几种方式:
1.以“*”来开始一行。
这样,该行就会被当做注释。
2.将注释放在“/*”和“*/”之间。
该种格式可以置于句中的任何位置。
此外,在行末使用“/*”,并在下一行行首使用“*/”,可以将很长的命令分成两行。
3.将注释置于双斜线“/”之后。
如果双斜线之前有命令,则双斜线与命令之间至少要有一个空格。
4.将注释置于三斜线“/”之后。
如果三斜线之前有命令,斜线与命令之间也是至少要有一个空格。
此外,对于“/”,其下一行的命令会被认为是前面命令的继续。
三斜线也可单独置于行尾,从而将很长的命令分成几行。
例如,我们可以写这样一段命令:
*thisisanexampleuse/*getdata*/C:
Stata10datasample.dtasummarizeageeducation/occupationtabregion/obtainsummarystatistics如果去掉注释,上面的命令即为:
useC:
Stata10datasample.dtasummarizeageeducationoccupationtabregion此外,对于交互方式的命令,注释只可采取第一种方式,即在句首加上“*”。
6宏宏是Stata程序的变量,它用一个字符串(宏的名称)来代表另一个字符串(宏的内容)。
宏分为局部宏(localmacro)和全局宏(globalmacro)。
局部宏只属于其所定义的程序,不能从其他程序中调用。
而全局宏一旦被定义,就会留在内存,且可以被其他程序使用。
局部宏的名称最多有31个字符,它的定义方式为:
local宏的名称宏的内容或:
local宏的名称=表达式例如,我们输入命令:
localnv“thisisanewvar”就定义了一个叫做nv的局部宏,其内容为thisisanewvar。
如果我们要引用这个局部宏的内容,其格式为:
nv。
注意,左边的引号为标准键盘左上角的重音符(数字1左边的键),右边的引号为通常的单引号(回车键左边的键)。
定义完毕之后,如果我们输入:
nv我们就相当于输入了:
thisisanewvar,例如,我们可以输入如下的命令来显示这个宏的内容:
display“nv”注意,这里,宏nv外面的双引号必不可少,因为如果不加引号,我们相当于输入了如下的命令:
displaythisisanewvarStata会显示错误提示:
thisnotfound。
只有加上外面的双引号,才表示我们要显示一个字符串。
否则,Stata会将其当做变量来处理。
当然,如果宏的内容确实为存在的变量名,而我们要显示这个变量,就不必加上双引号。
对于定义局部宏的命令,宏内容上的引号可以省略。
也就是说,我们在定义时,可以采用如下的命令:
localnvthisisanewvar这与前面是等价的。
当然,加上引号能使命令的可读性更强。
下面,我们来看一下定义宏的两种形式的区别。
例如,对于如下两种形式:
localone3+2或等价地,localone“3+2”localtwo=3+2第一种形式中,局部宏one的内容为字符串3+2;而第二种形式中,Stata会先计算表达式的结果(3+2=5),然后将5保存到宏two中。
在第二种形式中,表达式可以是数值表达式或字符串表达式。
这里,3+2是数值表达式(如果想令其为字符串型,在外面加双引号就可以)。
此外,局部宏(以及全局宏)可以组合使用。
例如,局部宏i为数值6,宏x6为字符newvar,则宏xi就指代字符newvar。
另外,在组合时,我们可以通过大括号来设定运算的优先级。
如果要清除一个局部宏,可将其内容设置为空。
这可以通过如下三种方式实现:
localmacnamelocalmacnamelocalmacname=这里,macname指宏的名称。
而如果我们在程序中直接使用了一个没有被定义的宏,则Stata会将其当做一个内容为空的宏来处理。
对于全局宏而言,其名字最多可以有32个字符长。
全局宏的定义方法与局部宏类似,只需要将local改为global即可。
此外,引用全局宏时,在其名字前加上美元符号$。
此外,即便程序中的全局宏和局部宏有相同的名称也没有关系,因为他们的引用方法不同,Stata可以将其区分。
值得注意的一点是,如果我们要显示的内容第一个字符为美元符号,为了和全局宏进行区分,我们可以在该字符前加上反斜线。
例如:
display“$that”就表示要显示字符串$that,而不是全局宏that的内容。
7临时变量、临时矩阵和临时文件有些时候,程序在运行的过程中需要产生一些临时的变量、矩阵等,而一旦程序运行结束
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- chap16 STATA 编程 基础