当前位置:
文档之家› chap16 STATA编程基础
chap16 STATA编程基础
4 版本 随着Stata版本的变化,相应的命令也会有些变化。这样,
较早版本的命令可能就没法在现在的版本中使用,而现在 的某些命令可能也没法在以后的版本中使用。为了让现在 的程序能够在其他的版本中继续使用,我们可以在程序中 声明所使用的版本;这样,在更新版本的Stata中运行这个 程序,Stata就会做相应的调整,按当前版本的方式来翻译 程序的命令。要声明版本,可输入命令: version 10.1 这里,我们使用的是10.1版的Stata。对于其他版本的Stata, 在version后面输入相应的版本编号即可。
此外,局部宏(以及全局宏)可以组合使用。例如,局部宏`i'为数值6,
宏`x6' 为字符newvar,则宏`x`i''就指代字符newvar。另外,在组合时, 我们可以通过大括号来设定运算的优先级。
如果要清除一个局部宏,可将其内容设置为空。这可以通过如下三种
方式实现: ①local macname ②local macname "" ③local macname = "" 这里,macname指宏的名称。 而如果我们在程序中直接使用了一个没有被定义的宏,则Stata会将其 当做一个内容为空的宏来处理。
例如,我们可以写这样一段命令: *this is an example use /*get data*/ "C:\Stata10\data\sample.dta" summarize age education /// occupation tab region // obtain summary statistics 如果去掉注释,上面的命令即为: use "C:\Stata10\data\sample.dta" summarize age education occupation
综合了以上几点,我们前面的do文件可以修改为这样的形
式: capture program drop examp program examp display “this is an example” end examp 这里,第一行先检查是否有已定义的examp程序,如果有 就将其从内存中删除。第二到四行是定义程序examp,最 后一行是执行程序examp。
下面,我们再在命令窗口输入命令: examp
也就是说,我们要执行程序examp。这时,Stata就会显示: this is an example
在随后的时间里,我们如果还想显示“this is an
example”,直接输入命令“exa种方式,即, 先在do文件中写出程序的命令并保存,再键入“do filename”,然后就可以在随后的时间使用该程序命令了。
对于do文件中的命令,值得注意的是,每一行命令都需要
结束于一个硬回车(包括最后一行);除非通过 “#delimit”命令设置其他符号为换行符。例如,输入命 令: #delimit . 则我们设置以英文的句号作为换行符,也就是说,Stata只 有遇到英文句号才会认为这一句命令结束。设置其他的换 行符对于将很长的命令分成几行很有帮助,因为这时我们 可以在想分行的地方输入回车符,而Stata又不会认为这是 一句命令的结束。 而如果我们想重新以硬回车(carriage return)为换行符, 可输入以下命令: #delimit cr
我们可以采取交互的方式定义程序(即,在Stata命令窗口中输入程序
的各行命令),但实际应用中,程序经常是被保存到一个do文件或 ado文件中去,从而方便以后的应用。 在程序或do文件中,我们可能需要加入注释,从而方便以后或他人的 阅读。通常,我们还会声明版本,从而使得程序能够在以后更高版本 的Stata中继续使用。此外,局部宏、全局宏、临时变量、临时矩阵和 临时文件等也会经常被使用。
2 Stata程序和Do文件 Stata处理程序和处理do文件的方式是一样的,包括参数的传递、结果
的表达等。但do文件和程序也存在一些小的差别。例如,要激发一个 do文件,我们需要键入“do filename”,而要激发一个程序,我们只 需要键入程序名称就可以。此外,键入“do filename”之后,Stata会 显示do文件中的命令以及执行结果;而键入程序名之后,Stata只会显 示其执行结果。 下面,我们重点讲一下,通常情况下,将程序放到do文件中去需要注 意的问题。 例如,我们编写了一个简单的程序: program examp display “this is an example” end 并把它保存到名为“examp.do”的文件中,且把文件置于当前目录下。 下面,我们要执行这个do文件,就在Stata命令窗口输入如下的命令: do examp
tab region
此外,对于交互方式的命令,注释只可采取第一种方式,即在句首加
上“*”。
6 宏 宏是Stata程序的变量,它用一个字符串(宏的名称)来代表另一个字
符串(宏的内容)。宏分为局部宏(local macro)和全局宏(global macro)。局部宏只属于其所定义的程序,不能从其他程序中调用。 而全局宏一旦被定义,就会留在内存,且可以被其他程序使用。 局部宏的名称最多有31个字符,它的定义方式为: local 宏的名称 宏的内容 或: local 宏的名称=表达式 例如,我们输入命令: local nv “this is a newvar” 就定义了一个叫做nv的局部宏,其内容为this is a newvar。如果我们 要引用这个局部宏的内容,其格式为:`nv’。注意,左边的引号为标 准键盘左上角的重音符(数字1左边的键),右边的引号为通常的单引 号(回车键左边的键)。定义完毕之后,如果我们输入: `nv’ 我们就相当于输入了: this is a newvar
5 注释 有时,我们想在命令中加入注释,从而方便以后或他人的阅读。要在
do文件或ado文件中加入注释,可以采取如下几种方式: 1.以“*”来开始一行。这样,该行就会被当做注释。 2.将注释放在“/*”和“*/”之间。该种格式可以置于句中的任何位置。 此外,在行末使用“/*”,并在下一行行首使用“*/”,可以将很长 的命令分成两行。 3.将注释置于双斜线“//”之后。如果双斜线之前有命令,则双斜线与 命令之间至少要有一个空格。 4.将注释置于三斜线“///”之后。如果三斜线之前有命令,斜线与命 令之间也是至少要有一个空格。此外,对于“///”,其下一行的命令 会被认为是前面命令的继续。三斜线也可单独置于行尾,从而将很长 的命令分成几行。
例如,我们可以输入如下的命令来显示这个宏的内容: display “`nv’” 注意,这里,宏`nv’外面的双引号必不可少,因为如果不加引号,我
们相当于输入了如下的命令: display this is a newvar Stata会显示错误提示:this not found。只有加上外面的双引号,才表 示我们要显示一个字符串。否则,Stata会将其当做变量来处理。当然, 如果宏的内容确实为存在的变量名,而我们要显示这个变量,就不必 加上双引号。
实验操作指导 1 Do文件 do文件是一种文本文件,其扩展名为“.do”。要创建一个do文件,
可以通过菜单栏中Window的下拉选项Do-file Editor来打开Do文件编 辑器,也可以直接点击工具栏的图标 。而要执行一个do文件,可以 键入以下命令: do filename 这里,filename指相应的do文件的文件名。但需要注意的一点是,这 个filename.do文件需要放在当前目录下,只有这样,才可以不写文件 的路径;否则,需要在文件名前写出完整路径(而如果路径中有中文 字符,一定要将全部路径和文件名置于英文双引号之间)。 要查看当前目录,我们可输入命令: cd 当然,我们也可以先将当前目录更改到我们偏好的一个文件夹下,然 后再将do文件存放其中。例如,如下命令可以将当前目录更改到d盘 data文件夹下: cd “D:\data” 这里,需要注意的一点是,cd命令要求其后的文件夹原来就存在。
实验内容及数据来源 本实验中,我们会讲解do文件的创建和执行方法、定
界符的修改、程序和do文件的联系、ado文件的创建 和保存、注释的添加方法、版本的声明、局部宏和全 局宏的定义及引用以及临时变量、临时矩阵和临时文 件的定义和使用等内容。
本实验主要讲解编写程序的一些基本操作,不需要使
用数据文件。
当然,我们也可采取一种更为简洁的方式,即在do文件的最后一行加
上程序名,这样,当键入“do filename”的时候,Stata就会在加载完 程序后就执行程序。但需要注意的是,程序一旦被定义,Stata就不允 许对其重新定义。这样,如果我们随后又输入一遍“do filename”, Stata就会显示错误提示。要解决这个问题,我们可以在do文件的第一 行输入这样的命令: program drop 程序名
3 Ado文件 如果想自动加载并运行程序内容,我们可以将程序保存到ado
(automatically do)文件中(同样是利用do文件编辑器,保存时选择 扩展名为ado),以后,直接输入程序名就可以使用该程序。但需要 注意的是,ado文件的文件名和其中的程序名必须一致。 值得注意的是,如果在Stata运行的过程中改变了某个ado文件的命令 语句,则在重新运行这个ado文件前,要先将Stata内存中的ado文件清 除。即,输入命令: discard 否则,Stata还是会运行原来的那个ado文件。 个人编写的ado文件通常被存放在两个地方,一个是当前目录,另一 个是个人ado目录。个人ado目录通常位于“C:\ado\personal”,要查 看其具体位置,可输入命令: personal 而要查看或改变当前目录,可使用命令“cd”。