chap16 STATA编程基础

上传人:101****457 文档编号:53775034 上传时间:2018-09-05 格式:PPT 页数:83 大小:807KB
返回 下载 相关 举报
chap16 STATA编程基础_第1页
第1页 / 共83页
chap16 STATA编程基础_第2页
第2页 / 共83页
chap16 STATA编程基础_第3页
第3页 / 共83页
chap16 STATA编程基础_第4页
第4页 / 共83页
chap16 STATA编程基础_第5页
第5页 / 共83页
点击查看更多>>
资源描述

《chap16 STATA编程基础》由会员分享,可在线阅读,更多相关《chap16 STATA编程基础(83页珍藏版)》请在金锄头文库上搜索。

1、第十六章 STATA编程基础,主要内容,基本概念与工具 程序文件的基本格式 程序控制语句,实验16-1:基本概念与工具,实验基本原理 如果我们需要反复执行一些命令,就可以将相关命令存放在一个do文件中,然后保存并运行相应的do文件即可。相比起一遍一遍地输入命令,这种方式既方便又不容易出错。而另一些时候,我们会需要编写程序,从而能用一个命令来实现某种结果。 一个程序应以program开头,以end结束。也就是说,应呈现如下的形式: program 程序名 相应的命令 end我们可以采取交互的方式定义程序(即,在Stata命令窗口中输入程序的各行命令),但实际应用中,程序经常是被保存到一个do文件

2、或ado文件中去,从而方便以后的应用。 在程序或do文件中,我们可能需要加入注释,从而方便以后或他人的阅读。通常,我们还会声明版本,从而使得程序能够在以后更高版本的Stata中继续使用。此外,局部宏、全局宏、临时变量、临时矩阵和临时文件等也会经常被使用。,实验内容及数据来源 本实验中,我们会讲解do文件的创建和执行方法、定界符的修改、程序和do文件的联系、ado文件的创建和保存、注释的添加方法、版本的声明、局部宏和全局宏的定义及引用以及临时变量、临时矩阵和临时文件的定义和使用等内容。本实验主要讲解编写程序的一些基本操作,不需要使用数据文件。,实验操作指导 1 Do文件 do文件是一种文本文件,

3、其扩展名为“.do”。要创建一个do文件,可以通过菜单栏中Window的下拉选项Do-file Editor来打开Do文件编辑器,也可以直接点击工具栏的图标 。而要执行一个do文件,可以键入以下命令: do filename 这里,filename指相应的do文件的文件名。但需要注意的一点是,这个filename.do文件需要放在当前目录下,只有这样,才可以不写文件的路径;否则,需要在文件名前写出完整路径(而如果路径中有中文字符,一定要将全部路径和文件名置于英文双引号之间)。 要查看当前目录,我们可输入命令: cd 当然,我们也可以先将当前目录更改到我们偏好的一个文件夹下,然后再将do文件存放

4、其中。例如,如下命令可以将当前目录更改到d盘data文件夹下: cd “D:data” 这里,需要注意的一点是,cd命令要求其后的文件夹原来就存在。,对于do文件中的命令,值得注意的是,每一行命令都需要结束于一个硬回车(包括最后一行);除非通过“#delimit”命令设置其他符号为换行符。例如,输入命令: #delimit . 则我们设置以英文的句号作为换行符,也就是说,Stata只有遇到英文句号才会认为这一句命令结束。设置其他的换行符对于将很长的命令分成几行很有帮助,因为这时我们可以在想分行的地方输入回车符,而Stata又不会认为这是一句命令的结束。 而如果我们想重新以硬回车(carriag

5、e return)为换行符,可输入以下命令: #delimit cr,2 Stata程序和Do文件 Stata处理程序和处理do文件的方式是一样的,包括参数的传递、结果的表达等。但do文件和程序也存在一些小的差别。例如,要激发一个do文件,我们需要键入“do filename”,而要激发一个程序,我们只需要键入程序名称就可以。此外,键入“do filename”之后,Stata会显示do文件中的命令以及执行结果;而键入程序名之后,Stata只会显示其执行结果。 下面,我们重点讲一下,通常情况下,将程序放到do文件中去需要注意的问题。 例如,我们编写了一个简单的程序: program examp

6、 display “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 filena

7、me”,然后就可以在随后的时间使用该程序命令了。,当然,我们也可采取一种更为简洁的方式,即在do文件的最后一行加上程序名,这样,当键入“do filename”的时候,Stata就会在加载完程序后就执行程序。但需要注意的是,程序一旦被定义,Stata就不允许对其重新定义。这样,如果我们随后又输入一遍“do filename”,Stata就会显示错误提示。要解决这个问题,我们可以在do文件的第一行输入这样的命令: program drop 程序名 这样,在定义该程序之前,如果内存中已有这个程序,我们会先将其从内存中删掉。但这种解决方案也存在一个问题:在打开Stata的期间第一次运行这个do文件,

8、Stata会显示错误提示。因为这时还没有定义程序,所有没有办法将其删除。我们继续修正该命令为: capture program drop 文件名 将命令“capture”置于其他命令之前,就表示无论该命令是否作用,Stata也不显示错误提示,且能继续执行下面的命令。事实上,在包含程序的do文件中,我们经常可以看到程序的定义之前有这样的命令。,综合了以上几点,我们前面的do文件可以修改为这样的形式: capture program drop examp program examp display “this is an example” end examp 这里,第一行先检查是否有已定义的exa

9、mp程序,如果有就将其从内存中删除。第二到四行是定义程序examp,最后一行是执行程序examp。,3 Ado文件 如果想自动加载并运行程序内容,我们可以将程序保存到ado(automatically do)文件中(同样是利用do文件编辑器,保存时选择扩展名为ado),以后,直接输入程序名就可以使用该程序。但需要注意的是,ado文件的文件名和其中的程序名必须一致。 值得注意的是,如果在Stata运行的过程中改变了某个ado文件的命令语句,则在重新运行这个ado文件前,要先将Stata内存中的ado文件清除。即,输入命令: discard 否则,Stata还是会运行原来的那个ado文件。 个人编

10、写的ado文件通常被存放在两个地方,一个是当前目录,另一个是个人ado目录。个人ado目录通常位于“C:adopersonal”,要查看其具体位置,可输入命令: personal 而要查看或改变当前目录,可使用命令“cd”。,4 版本 随着Stata版本的变化,相应的命令也会有些变化。这样,较早版本的命令可能就没法在现在的版本中使用,而现在的某些命令可能也没法在以后的版本中使用。为了让现在的程序能够在其他的版本中继续使用,我们可以在程序中声明所使用的版本;这样,在更新版本的Stata中运行这个程序,Stata就会做相应的调整,按当前版本的方式来翻译程序的命令。要声明版本,可输入命令: vers

11、ion 10.1 这里,我们使用的是10.1版的Stata。对于其他版本的Stata,在version后面输入相应的版本编号即可。,5 注释 有时,我们想在命令中加入注释,从而方便以后或他人的阅读。要在do文件或ado文件中加入注释,可以采取如下几种方式: 1.以“*”来开始一行。这样,该行就会被当做注释。 2.将注释放在“/*”和“*/”之间。该种格式可以置于句中的任何位置。此外,在行末使用“/*”,并在下一行行首使用“*/”,可以将很长的命令分成两行。 3.将注释置于双斜线“/”之后。如果双斜线之前有命令,则双斜线与命令之间至少要有一个空格。 4.将注释置于三斜线“/”之后。如果三斜线之前

12、有命令,斜线与命令之间也是至少要有一个空格。此外,对于“/”,其下一行的命令会被认为是前面命令的继续。三斜线也可单独置于行尾,从而将很长的命令分成几行。,例如,我们可以写这样一段命令: *this is an example use /*get data*/ “C:Stata10datasample.dta“ summarize age education / occupation tab region / obtain summary statistics如果去掉注释,上面的命令即为: use “C:Stata10datasample.dta“ summarize age education

13、 occupation tab region 此外,对于交互方式的命令,注释只可采取第一种方式,即在句首加上“*”。,6 宏 宏是Stata程序的变量,它用一个字符串(宏的名称)来代表另一个字符串(宏的内容)。宏分为局部宏(local macro)和全局宏(global macro)。局部宏只属于其所定义的程序,不能从其他程序中调用。而全局宏一旦被定义,就会留在内存,且可以被其他程序使用。 局部宏的名称最多有31个字符,它的定义方式为: local 宏的名称 宏的内容 或: local 宏的名称=表达式 例如,我们输入命令: local nv “this is a newvar” 就定义了一个

14、叫做nv的局部宏,其内容为this is a newvar。如果我们要引用这个局部宏的内容,其格式为:nv。注意,左边的引号为标准键盘左上角的重音符(数字1左边的键),右边的引号为通常的单引号(回车键左边的键)。定义完毕之后,如果我们输入: nv 我们就相当于输入了: this is a newvar,例如,我们可以输入如下的命令来显示这个宏的内容: display “nv” 注意,这里,宏nv外面的双引号必不可少,因为如果不加引号,我们相当于输入了如下的命令: display this is a newvar Stata会显示错误提示:this not found。只有加上外面的双引号,才表

15、示我们要显示一个字符串。否则,Stata会将其当做变量来处理。当然,如果宏的内容确实为存在的变量名,而我们要显示这个变量,就不必加上双引号。 对于定义局部宏的命令,宏内容上的引号可以省略。也就是说,我们在定义时,可以采用如下的命令: local nv this is a newvar 这与前面是等价的。当然,加上引号能使命令的可读性更强。,下面,我们来看一下定义宏的两种形式的区别。例如,对于如下两种形式: local one 3+2 或等价地,local one “3+2” local two=3+2 第一种形式中,局部宏one的内容为字符串3+2;而第二种形式中,Stata会先计算表达式的结

16、果(3+2=5),然后将5保存到宏two中。在第二种形式中,表达式可以是数值表达式或字符串表达式。这里,3+2是数值表达式(如果想令其为字符串型,在外面加双引号就可以)。此外,局部宏(以及全局宏)可以组合使用。例如,局部宏i为数值6,宏x6 为字符newvar,则宏xi就指代字符newvar。另外,在组合时,我们可以通过大括号来设定运算的优先级。,如果要清除一个局部宏,可将其内容设置为空。这可以通过如下三种方式实现: local macname local macname “ local macname = “ 这里,macname指宏的名称。 而如果我们在程序中直接使用了一个没有被定义的宏,则Stata会将其当做一个内容为空的宏来处理。对于全局宏而言,其名字最多可以有32个字符长。全局宏的定义方法与局部宏类似,只需要将local改为global即可。此外,引用全局宏时,在其名字前加上美元符号$。此外,即便程序中的全局宏和局部宏有相同的名称也没有关系,因为他们的引用方法不同,Stata可以将其区分。 值得注意的一点是,如果我们要显示的内容第一个字符为美元符号,为了和全局宏进行区分,我们可以在该字符前加上反斜线。例如: display “$that” 就表示要显示字符串$that,而不是全局宏that的内容。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号