第十四章 Stata编程基础
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(1)这里的任务是利用forvalues语句生成四个变量lngdp1、 lngdp2、lndgp3和lngdp4,它们分别是gdp1、gdp2、gdp3和 gdp4的对数,然后显示新生成的四个变量的描述性统计量。 (2)生成变量gdp1_1995、gdp2_1995、gdp3_1995、 gdp4_1995、gdp1_1997、gdp2_1997、gdp3_1997、gdp4_1997、 gdp1_1999、gdp2_1999、gdp3_1999、gdp4_1999的描述性统计 结果。
STATA 从入门到精通
第十四章 Stata编程基础
引言
这一章讨论Stata中一些常用的编程语句。我们将讲解do文件与log文 件,用户可以将任何顺序的Stata命令存入一个文本文件或do文件中, 并通过Stata中的do命令或do文件编辑器来执行。通过使用Stata的 do文件,用户可以避免重复键入相同的程序,使得一些重复性编程问 题的处理变得更加方便。
Page 13
STATA从入门到精通
下面我们举一些简单的例子说明。
定义标量a,赋值为2: . scalar a = 2
定义标量b,赋值为a的赋值加上3:
. scalar b = a+3 定义标量root2,其赋值为2的开方:
. scalar root2 = sqrt(2)
定义标量s1,其赋值是字符串‚hello world‚: . scalar s1 = "hello world"
【例14-9】本例使用数据集abdata.dta,该数据集是一个面板数据, 是140个国家 1976年到1984年的各种宏观指标。在这里的关键变量 是id代表每个国家的标号,year代表年份,一个面板数据通常定义这 两个变量以便进行各种面板回归和统计。其他的变量包括就业率emp (%)、平均工资wage(指标)、投资占GDP的百分比cap(%)。 表14-4 罗列了部分数据 这里要求用tsset命令查看该面板数据的结构,并使用return list返回 相关的结果。
Page 17
STATA从入门到精通
14.4.2 foreach语句
foreach语句的语法如下:
foreach lname {in|of listtype} list { commands referring to `lname' }
可以使用的类型包括: 对于每一个局部宏 foreach lname of local lmacname { 对于每一个全局宏 foreach lname of global gmacname { 对于变量列表中的每一个变量 foreach lname of varlist varlist { 对于数字列表中的每一个数字 foreach lname of numlist numlist {
. log using example .txt, text replace
其中replace选项允许新写入的log文件覆盖原有的同名文 件。如果这里没有replace,且文件中已经存在同名log文 件,Stata会拒绝该文件的创建。当程序执行完毕时,用 户可以键入
. log close 来关闭当前的log文件。
因为全局宏的使用可能会带来一些意想不到的问题,只有在少数下我 们才会选择使用全局宏。比如我们在do文件A中创建了一个全局宏 abc,之后我们却忘记了。若之后我们在do文件G或H的编写中,又 使用了宏abc,此时会将其作为一个它全局宏进行计算,运行出来的 结果将会是不合意的,而我们很难避免这样的问题。一些教 FORTRAN或C语言的老师经常会鼓励同学们多使用局部宏,尽量避 免使用全局宏,运用到Stata的编程中道理也是一样的。
下面让我们从最简单的r类命令入手。理论上说,所有的Stata命令都 会将其所有的输出项存放在一个返回列表中。输入命令:
return list
就可以获得这些输出项。
Page 20
STATA从入门到精通
【例14-8】 打开数据集wage.dta,使用describe命令描述该数据集, 然后返回describe命令中的输出项。
Page 18
STATA从入门到精通
【例14-7】我们这里使用数据集lifeexp来说明foreach命令语句的使 用,这个数据集在第三章已经使用过了,该数据集是一个关于全球68 国人口生存状况的数据,这些国家分别来自欧亚、北美和南美四大洲, 数据的内容参看第三章,表3-10 是所有变量的一个概览,表3-11列 出了数据集中北美洲国家的观测值。
Country 1 : US Country 2 : UK Country 3 : DE Country 4 : FR 【例14-3】请定义一个计数宏count从1到4,定义一个包含四个国家 简写(US UK DE FR)的局部宏country,然后通过使用foreach语 句(循环语句foreach会在)和display语句生成如下样式的结果: 1 US 2 UK 3 DE 4 FR
#1(#d)#2 表示从#1到#2步长为#d
#1/#2 表示以步长为1从#1到#2
Page 16
STATA从入门到精通
【例14-6】数据集gdp4cty.dta是美国、英国、德国和法国GDP的季 度数据,从1971年的第1季度到1995年的第4季度,该数据集中重要 的变量如表14-1所示,部分数据罗列在了表14-2中。
Page 10
STATA从入门到精通
14.2.3 一些扩展函数以及列表函数
在Stata的编程过程中,用户可以通过许多扩展函数以各种灵活的方 式来使用宏,此时需要在宏的名称和扩展函数之间添加一个冒号 (:),这样用户便可以更加简单的重获或修改宏的内容。
使用宏的扩展函数的语法是:
{local | global} macname : extended_function
Page 5
STATA从入门到精通
14.2 局部宏与全局宏 14.2.1 局部宏
【例3-2】请定义一个计数宏count从1到4,定义一个包含四个国家 简写(US UK DE FR)的局部宏country,然后通过使用foreach语 句(循环语句foreach会在13.4节详细介绍)和display语句生成如下 样式的结果:
变量名 cty gdp t ctycode cc date 存储格式 str2 float float str2 long float 显示格式 %9s %9.0g %9.0g %9s %8.0g %tq 含义 国家名称 该季度GDP数值 时间变量 国家代码 国家代码(数值型变量) 季度
Page 8
Page 15
STATபைடு நூலகம்从入门到精通
14.4 循环结构 14.4.1 forvalues语句
forvalues语句如下:
forvalues lname = range { commands referring to `lname' }
其中,lname是指定的局部宏名称,而rang可以有如下形式:
doedit
Page 3
STATA从入门到精通
14.1.2运行do文件
1. 用户可以通过命令窗口来执行已经编写好的do文件。
2. 另一种办法是通过do文件编辑器来执行do文件。
Page 4
STATA从入门到精通
14.1.3 log文件
Log文件可以通过log命令创建。例如,为了创建一个名为 example.txt的log文件,用户可以在命令框中键入:
STATA从入门到精通
cty FR US
gdp 798.3199 717.5816
t 301 1
ctycode FR US
cc FR US
date 1971q1 1971q1
DE UK
DE FR UK US
85.78448 942.6335
42.97224 605.0197 730.4266 139.905
201 101
202 302 102 2
DE UK
DE FR UK US
DE UK
DE FR UK US
1971q1 1971q1
1971q2 1971q2 1971q2 1971q2
Page 9
STATA从入门到精通
14.2.2 全局宏
全局宏的内涵与定义方式不同于局部宏。它往往被用来存储整个过程 中所需要的用到的宏。例如,当我们需要存储一些当前的数据,且这 些数据将会被所有的程序或默认路径下的数据集与do文件所使用时, 我们就可以创建一个全局宏。
Country 1 : US Country 2 : UK
Country 3 : DE
Country 4 : FR
Page 12
STATA从入门到精通
14.3 标量简介
定义标量
scalar [define] scalar_name = exp
其中,scalar_name是要定义的标量名,标量的赋值通过一个数值或者 文字表达式 exp 来表示。
其中,macname是局部宏或者全局宏名,而extended_function就 宏的扩展函数,具体来说包括如下这些函数,见表14-3所示。
Page 11
STATA从入门到精通
【例14-5】请定义一个包含四个国家简写(US UK DE FR)的局部 宏country,使用宏扩展函数word count定义局部宏wds表示最大的 循环个数,使用宏扩展函数word ‘i’生成局部宏wd作为计数依据, 然后通过使用foreach语句(循环语句foreach会在14.4节详细介绍) 和display语句生成如下样式的结果:
显示标量的内容 scalar { dir | list } [ _all | scalar_names ]
其中,scalar dir和scalar list都用于显示标量的内容,其后面可以使用 _all表示内存中的所有变量,也可以指定某些标量名称 (scalar_names)。
从内存中删掉某些标量
scalar drop { _all | scalar_names }
Page 6
STATA从入门到精通
Page 7
STATA从入门到精通
【例14-4】数据集gdp4cty.dta是美国、英国、德国和法国GDP的季度数据, 从1971年的第1季度到1995年的第4季度,该数据集中重要的变量如表14-1所 示,部分数据罗列在了表14-2中。本例要求利用局部宏和foreach语句生成 每一国家的GDP时间趋势图。
所谓do文件是以. do为后缀的包含一系列Stata命令的文本文件。编写 do文件的标准步骤如下:
(1)确定当前工作目录。
查看当前工作目录只需输入cd,而要改变当前目录,可以在cd后加上要 更改的目标目录地址。
(2)打开一个Do文件编辑器。 (3)输入Do文件的内容,并保存。 保存可以直接点击save按钮,或者打开菜单file,然后寻找并点击save。 另外,作为一个比较快捷的方式,用户也可以直接在命令框中输入:
Page 14
STATA从入门到精通
显示定义好的所有标量:
. scalar list 删掉标量a和b:
. scalar drop a b
再比如如下两个命令,要求定义标量,并且将这个标量用于定义新的变 量: .scalar root2 = sqrt(2.0) //生成一个标量,其赋值为2的开根号 .generate DOuble rootGDP = gdp*root2 //将这个标量用于定义新的变 量
本章的内容包括do文件和log文件的介绍、局部宏和全局宏、标量和 矩阵、循环语句以及如何利用return list和ereturn list命令获得Stata 命令的结果,这些内容都是Stata编程的基础。
Page 2
STATA从入门到精通
14.1 do文件和Log文件 14.1.1 do文件的编写
这里要求计算这些变量的描述性统计量以及它们与popgrowth的相关 性,并且绘制它们与popgrowth的散点图。
Page 19
STATA从入门到精通
14.6 使用Stata命令的结果
所有的Stata的命令都可以被归入一下三类:r类、e类、s类(属于这 类的情况较少)。其中e类命令是指估计命令(estimation commands),这类命令将返回两个矩阵:e(b)——被估计的系数矩 阵,e(v)——被估计系数的方差与协方差矩阵,同时也会返回一些其 他信息(详情参见help ereturn)。其他绝大多数的Stata官方命令属 于r类命令,这类命令是将运行结果返回到调用程序当中(详情参见 help return)。 14.6.1 r类命令
STATA 从入门到精通
第十四章 Stata编程基础
引言
这一章讨论Stata中一些常用的编程语句。我们将讲解do文件与log文 件,用户可以将任何顺序的Stata命令存入一个文本文件或do文件中, 并通过Stata中的do命令或do文件编辑器来执行。通过使用Stata的 do文件,用户可以避免重复键入相同的程序,使得一些重复性编程问 题的处理变得更加方便。
Page 13
STATA从入门到精通
下面我们举一些简单的例子说明。
定义标量a,赋值为2: . scalar a = 2
定义标量b,赋值为a的赋值加上3:
. scalar b = a+3 定义标量root2,其赋值为2的开方:
. scalar root2 = sqrt(2)
定义标量s1,其赋值是字符串‚hello world‚: . scalar s1 = "hello world"
【例14-9】本例使用数据集abdata.dta,该数据集是一个面板数据, 是140个国家 1976年到1984年的各种宏观指标。在这里的关键变量 是id代表每个国家的标号,year代表年份,一个面板数据通常定义这 两个变量以便进行各种面板回归和统计。其他的变量包括就业率emp (%)、平均工资wage(指标)、投资占GDP的百分比cap(%)。 表14-4 罗列了部分数据 这里要求用tsset命令查看该面板数据的结构,并使用return list返回 相关的结果。
Page 17
STATA从入门到精通
14.4.2 foreach语句
foreach语句的语法如下:
foreach lname {in|of listtype} list { commands referring to `lname' }
可以使用的类型包括: 对于每一个局部宏 foreach lname of local lmacname { 对于每一个全局宏 foreach lname of global gmacname { 对于变量列表中的每一个变量 foreach lname of varlist varlist { 对于数字列表中的每一个数字 foreach lname of numlist numlist {
. log using example .txt, text replace
其中replace选项允许新写入的log文件覆盖原有的同名文 件。如果这里没有replace,且文件中已经存在同名log文 件,Stata会拒绝该文件的创建。当程序执行完毕时,用 户可以键入
. log close 来关闭当前的log文件。
因为全局宏的使用可能会带来一些意想不到的问题,只有在少数下我 们才会选择使用全局宏。比如我们在do文件A中创建了一个全局宏 abc,之后我们却忘记了。若之后我们在do文件G或H的编写中,又 使用了宏abc,此时会将其作为一个它全局宏进行计算,运行出来的 结果将会是不合意的,而我们很难避免这样的问题。一些教 FORTRAN或C语言的老师经常会鼓励同学们多使用局部宏,尽量避 免使用全局宏,运用到Stata的编程中道理也是一样的。
下面让我们从最简单的r类命令入手。理论上说,所有的Stata命令都 会将其所有的输出项存放在一个返回列表中。输入命令:
return list
就可以获得这些输出项。
Page 20
STATA从入门到精通
【例14-8】 打开数据集wage.dta,使用describe命令描述该数据集, 然后返回describe命令中的输出项。
Page 18
STATA从入门到精通
【例14-7】我们这里使用数据集lifeexp来说明foreach命令语句的使 用,这个数据集在第三章已经使用过了,该数据集是一个关于全球68 国人口生存状况的数据,这些国家分别来自欧亚、北美和南美四大洲, 数据的内容参看第三章,表3-10 是所有变量的一个概览,表3-11列 出了数据集中北美洲国家的观测值。
Country 1 : US Country 2 : UK Country 3 : DE Country 4 : FR 【例14-3】请定义一个计数宏count从1到4,定义一个包含四个国家 简写(US UK DE FR)的局部宏country,然后通过使用foreach语 句(循环语句foreach会在)和display语句生成如下样式的结果: 1 US 2 UK 3 DE 4 FR
#1(#d)#2 表示从#1到#2步长为#d
#1/#2 表示以步长为1从#1到#2
Page 16
STATA从入门到精通
【例14-6】数据集gdp4cty.dta是美国、英国、德国和法国GDP的季 度数据,从1971年的第1季度到1995年的第4季度,该数据集中重要 的变量如表14-1所示,部分数据罗列在了表14-2中。
Page 10
STATA从入门到精通
14.2.3 一些扩展函数以及列表函数
在Stata的编程过程中,用户可以通过许多扩展函数以各种灵活的方 式来使用宏,此时需要在宏的名称和扩展函数之间添加一个冒号 (:),这样用户便可以更加简单的重获或修改宏的内容。
使用宏的扩展函数的语法是:
{local | global} macname : extended_function
Page 5
STATA从入门到精通
14.2 局部宏与全局宏 14.2.1 局部宏
【例3-2】请定义一个计数宏count从1到4,定义一个包含四个国家 简写(US UK DE FR)的局部宏country,然后通过使用foreach语 句(循环语句foreach会在13.4节详细介绍)和display语句生成如下 样式的结果:
变量名 cty gdp t ctycode cc date 存储格式 str2 float float str2 long float 显示格式 %9s %9.0g %9.0g %9s %8.0g %tq 含义 国家名称 该季度GDP数值 时间变量 国家代码 国家代码(数值型变量) 季度
Page 8
Page 15
STATபைடு நூலகம்从入门到精通
14.4 循环结构 14.4.1 forvalues语句
forvalues语句如下:
forvalues lname = range { commands referring to `lname' }
其中,lname是指定的局部宏名称,而rang可以有如下形式:
doedit
Page 3
STATA从入门到精通
14.1.2运行do文件
1. 用户可以通过命令窗口来执行已经编写好的do文件。
2. 另一种办法是通过do文件编辑器来执行do文件。
Page 4
STATA从入门到精通
14.1.3 log文件
Log文件可以通过log命令创建。例如,为了创建一个名为 example.txt的log文件,用户可以在命令框中键入:
STATA从入门到精通
cty FR US
gdp 798.3199 717.5816
t 301 1
ctycode FR US
cc FR US
date 1971q1 1971q1
DE UK
DE FR UK US
85.78448 942.6335
42.97224 605.0197 730.4266 139.905
201 101
202 302 102 2
DE UK
DE FR UK US
DE UK
DE FR UK US
1971q1 1971q1
1971q2 1971q2 1971q2 1971q2
Page 9
STATA从入门到精通
14.2.2 全局宏
全局宏的内涵与定义方式不同于局部宏。它往往被用来存储整个过程 中所需要的用到的宏。例如,当我们需要存储一些当前的数据,且这 些数据将会被所有的程序或默认路径下的数据集与do文件所使用时, 我们就可以创建一个全局宏。
Country 1 : US Country 2 : UK
Country 3 : DE
Country 4 : FR
Page 12
STATA从入门到精通
14.3 标量简介
定义标量
scalar [define] scalar_name = exp
其中,scalar_name是要定义的标量名,标量的赋值通过一个数值或者 文字表达式 exp 来表示。
其中,macname是局部宏或者全局宏名,而extended_function就 宏的扩展函数,具体来说包括如下这些函数,见表14-3所示。
Page 11
STATA从入门到精通
【例14-5】请定义一个包含四个国家简写(US UK DE FR)的局部 宏country,使用宏扩展函数word count定义局部宏wds表示最大的 循环个数,使用宏扩展函数word ‘i’生成局部宏wd作为计数依据, 然后通过使用foreach语句(循环语句foreach会在14.4节详细介绍) 和display语句生成如下样式的结果:
显示标量的内容 scalar { dir | list } [ _all | scalar_names ]
其中,scalar dir和scalar list都用于显示标量的内容,其后面可以使用 _all表示内存中的所有变量,也可以指定某些标量名称 (scalar_names)。
从内存中删掉某些标量
scalar drop { _all | scalar_names }
Page 6
STATA从入门到精通
Page 7
STATA从入门到精通
【例14-4】数据集gdp4cty.dta是美国、英国、德国和法国GDP的季度数据, 从1971年的第1季度到1995年的第4季度,该数据集中重要的变量如表14-1所 示,部分数据罗列在了表14-2中。本例要求利用局部宏和foreach语句生成 每一国家的GDP时间趋势图。
所谓do文件是以. do为后缀的包含一系列Stata命令的文本文件。编写 do文件的标准步骤如下:
(1)确定当前工作目录。
查看当前工作目录只需输入cd,而要改变当前目录,可以在cd后加上要 更改的目标目录地址。
(2)打开一个Do文件编辑器。 (3)输入Do文件的内容,并保存。 保存可以直接点击save按钮,或者打开菜单file,然后寻找并点击save。 另外,作为一个比较快捷的方式,用户也可以直接在命令框中输入:
Page 14
STATA从入门到精通
显示定义好的所有标量:
. scalar list 删掉标量a和b:
. scalar drop a b
再比如如下两个命令,要求定义标量,并且将这个标量用于定义新的变 量: .scalar root2 = sqrt(2.0) //生成一个标量,其赋值为2的开根号 .generate DOuble rootGDP = gdp*root2 //将这个标量用于定义新的变 量
本章的内容包括do文件和log文件的介绍、局部宏和全局宏、标量和 矩阵、循环语句以及如何利用return list和ereturn list命令获得Stata 命令的结果,这些内容都是Stata编程的基础。
Page 2
STATA从入门到精通
14.1 do文件和Log文件 14.1.1 do文件的编写
这里要求计算这些变量的描述性统计量以及它们与popgrowth的相关 性,并且绘制它们与popgrowth的散点图。
Page 19
STATA从入门到精通
14.6 使用Stata命令的结果
所有的Stata的命令都可以被归入一下三类:r类、e类、s类(属于这 类的情况较少)。其中e类命令是指估计命令(estimation commands),这类命令将返回两个矩阵:e(b)——被估计的系数矩 阵,e(v)——被估计系数的方差与协方差矩阵,同时也会返回一些其 他信息(详情参见help ereturn)。其他绝大多数的Stata官方命令属 于r类命令,这类命令是将运行结果返回到调用程序当中(详情参见 help return)。 14.6.1 r类命令