CCER04 硕 邹传伟 2006 年 1 月
Stata 介绍
作为流行的计量经济学软件,Stata 的功能十分地全面和强大。可以毫不夸张地说,
凡是成熟的计量经济学方法,在 Stata 中都可以找到相应的命令,而这些命令都有许多
选项以适应不同的环境或满足不同的需要。即使是最详细的 Stata 手册,也难免有遗珠
之憾,更何况本文仅是一个粗浅的介绍。掌握 Stata 最好的办法是在实践中学习:Stata
本身提供了非常强大的帮助系统,并且关于 Stata 的书籍和网络资源都不少。
本文拟根据如下顺序介绍 Stata:
1.界面;
2.文件和数据;
3.语法和命令;
4.数据管理;
5.描述统计;
6.画图;
7.回归和回归分析;
8.常用命令。
第 3 和第 4 部分是最体现 Stata 灵活性的地方,也是应用 Stata 的基础。第 5 和第 6
部分介绍如何用 Stata 完成基本的统计功能。Stata 的功能很多,比如回归,曲线拟合,
生存分析,主成分分析,因子分析,聚类分析,时间序列分析等等。但回归无疑是其中
最重要的功能。第 7 部分介绍如何用 Stata 作线性回归和 Logistic 回归。本文第 2 和第 3
部分包含了作者的观点,难免有偏颇之处。其余部分主要来自文献的归纳和总结。限于
水平有限,错误在所难免,敬请原谅。
1
CCER04 硕 邹传伟 2006 年 1 月
1.界面
图 1 Stata 界面
Stata 有 4 个窗口:
1. Stata Command(右下)用于向 Stata 输入命令;
2. Stata Results(右上)用于显示运行结果;
3. Review(左上)记录使用过的命令;
4. Variables(左下)显示当前 memory 中的所有变量。
窗口上方是工具栏,其上的按钮依次为(从左到右)Open, Save, Print Graph/Print Log,
Log Start/Stop/Suspend, Bring Log to Front, Bring Graph to Front, Do-file Editor, Data Editor,
Data Browser, Clear –more- condition, Break。其中常用的有 Open, Save, Do-file Editor,
Data Editor 和 Data Browser(图 1 中已用圆圈标出)。它们的使用办法将在下文介绍。
工具栏上方是菜单栏。其中最常用的是 Help 菜单。
界面左下角显示了 Stata 的默认路径。Stata 使用的数据文件一般存放在该路径下。
2
CCER04 硕 邹传伟 2006 年 1 月
2.文件和数据
Stata 相关的文件有三类:数据文件,do-file 文件,log 文件。
1.数据文件
数据文件以后缀“.dta”表示。数据文件是 Stata 处理和分析的对象。数据文件具有如下
的逻辑结构:
1.
2.
……
N.
variable 1
variable 2
……
variable K
表 1
其中每一行表示一个观测,每一列表示一个变量。每个观测都有一个编号(表 1 左起第
1 列),是系统自动加上去的。Stata 对数据类型的区分不是很细致,分为数据型和字符型。
缺失数据用“.”表示。
数据文件可以在 Data Editor 中生成,如图 2 所示。在方格中输入相应的变量名和数据
后,点击 Save 按钮即可。
图 2
也可以将文本文档(.txt)和 Excel 表格(.xls)中的数据读入,并存为数据文件。比如,
假设 D 盘根目录下有一个 txt 文件 data0.txt,现在要将其读入,并存为 data1.dta。可以使用
3
CCER04 硕 邹传伟 2006 年 1 月
如下指令:
insheet using d:\data0.txt
save data1.dta
在读入数据后,Stata Command 会显示读入了多少个观测,多少个变量,Variables 会显示变
量名列表。数据文件 data1.dta 存放在 Stata 默认路径中。而如果 data0.txt 本身就在 Stata 的
默认路径中,则第 1 条指令可以简化为:
insheet using data0.txt
要打开已经存在的数据文件,可以使用 Open 按钮,或使用 use 命令。假设 Stata 的默认
路径中有数据文件 data2.dta,则可使用如下指令:
use data2.dta
(至此不难看出,在 Stata 中,同一个功能,既可以用命令实现,也可以用工具栏和菜
单栏实现。)
有必要介绍 Stata 中一个重要的概念:memory。memory 可以视为 Stata 的工作环境。数
据文件只有在被读入 memory 后才能被处理。在一个时点上,memory 中最多只能有一个数
据文件。如果在一个数据文件处理途中想处理另一个数据文件,必须先用 clear 命令清空
memory 后(此时 Variables 会显示没有变量)再打开后一数据文件。
对已在 memory 中的数据文件,可以用 Data Browser 按钮查看,但不能修改。如果想做
修改,可以用 Data Editor 按钮,注意修改后用 Save 按钮保存即可。也有命令来查看和修改
在 memory 中的数据文件。见本文的第 4 部分。
值得注意的是,在 memory 中,数据文件是以变量为单位存在的。具体而言,处理和分
析数据只能在变量层面进行。Stata 的语法和命令都是针对变量的。
2.do-file 文件
do-file 文件以后缀“.do”表示。
在 command 窗口输入命令很不方便,而且也不利于保存对数据文件处理和分析的过程。
替代的做法是使用工具栏中“Do-file-editor”(左起第 8 个)在 Do-file 中编程。
在 do-file 文件中,用*表示注释内容,Stata 在运行 do-file 文件时会跳过这些注释语句。
加入注释语句能增强 do-file 文件的可读性。最好为每一个 do-file 文件写详细的注释内容。
比如文件名称,计量分析的目的,时间和结果存放位置。如果过程中生成并保存了数据文件,
应写出相应数据文件的名称等。如果中途对 do-file 文件进行过修改,最好将修改过文件保
存为另一个文件,以便于将来对比分析原文件和修改后的文件。
4
CCER04 硕 邹传伟 2006 年 1 月
以下是一个 do-file 文件的格式:
*Wage_analysis.do
*The program is written for the analysis of wage determination.
*Data management: reshape the data to panel.
*This result will be saved in the data file: wage1.dta
* written: 10/21/05
图 3 是一个 do-file 的例子。
图 3
工具栏最右边的两个按钮分别是 Do current file 和 Run current file。点击后便可运行
do-file 文件。也可以选择部分命令让 Stata 只运行选中部分。
可以保存当前使用的 do-file 文件。Review 窗口中的命令也可以保存为 do-file。方法是
点击 Review 窗口左上角,选择 Save Review Contents。
5
CCER04 硕 邹传伟 2006 年 1 月
3.log 文件
log 文件以后缀“.log”表示,用于记录 Stata 的运行结果。
在开始运行 Stata 时,创建一个 log 文件,并指定其路径和文件名,在结束运行时,再
将其关掉,则可记录此间 Stata 的运行结果。
以下是使用的方法:
(开始运行)
log using c:\stata8\logfiles\10.21.5_30.log
………………….
(Stata 命令)
…………………..
log close
(结束运行)
从而 10.21.5_30.log 就记录了从“log using”命令 到“log close”命令之间 Stata 运行的所有
结果。
3.语法和命令
Stata 的语法十分地简单和灵活。一个命令便构成了一条可执行的语句,在 Stata
Command 中输入后,敲回车键就可以运行了。当然也可以将一组语句编成 do-file 文件,按
前边介绍的方法运行就可以了。每个命令都有调用的格式,只要符合 Stata 规定的格式,语
法上就是无误的。至于具体的格式,使用时查一下 Stata 的帮助系统或工具手册就可以了。
本文也不会详细介绍命令调用的格式。
Stata 命令可以大体上分成 4 类:help 命令;针对 memory 的命令;处理和分析数据的命
令;数学命令。现分述如下。
help 命令十分地简单。比如想了解“regress”的用法,可在 Stata Command 中输入如下
语句后回车:
Stata 会提供关于“regress”用法的详细说明,并配以例子。
help regress
针对 memory 的命令有清空命令 clear 和设置 memory 大小的 set memory 命令。memory
有一个默认的大小,但如果数据文件太大,必须重设 memory 的大小,如下所示:
6
CCER04 硕 邹传伟 2006 年 1 月
set memory 2m
该指令将 memory 大小设为 2 兆。
处理和分析数据的命令构成 Stata 命令的主体。它们可实现各种各样的功能,但大体具
有如下的格式:
[by varlist1:] command [varlist2] [if exp] [in range] [,options]
其中[by varlist1:]表示按一组变量(由 varlist1 指定)分组;
command [varlist2]表示命令是针对由 varlist2 指定的变量;
[if exp]表示命令只针对满足 exp(一般是一个逻辑表达式)的观测;
[in range]表示命令只针对处在 range 指定的范围内的观测,如 in 5 指执行的范围是第 5
个观测,in -5 指执行的范围是倒数第 5 个观测,in 5/12 指执行的范围是从第 5 到第 12 个观
测;
[,options]是命令特有的一些选项,根据情况和需要而定,Stata 的强大功能主要就体现
在这些选项上,选项的使用非常精细和讲究,使用时既要依据个人的经验,也要参看 Stata
的帮助系统或工具手册。
[if exp]极大地体现了 Stata 的灵活性。逻辑表达式 exp 一般由以下成分构成:
■ 变量名
■ 数字,字符,表示缺失值的“.”
■ 关系运算符:==(等于),!=,~=(不等于),>(大于),<(小于),>=(大于或
等于),<=(小于或等于)
■ 逻辑运算符:&(与),|(或),~(非)
以下是一些应用的例子:
if age > 65 & age < 85(age 大于 65,小于 85 的观测)
if place == “Canada” & pop ~= . (place 为“Canada”并且 pop 不缺失的观测)
if year==1994 | year==1997 (year 为 1994 或 1997 的观测)
if ~(pop==. & year==.) (排除 pop 和 year 都缺失的观测)
根据需要,逻辑表达式可以有非常复杂的形式。
[in range]和[if exp]相当于从一个大样本中挑出符合条件的小样本,其用处体现在两个方
面。首先是数据清理阶段,找出那些有明显的错误或有缺失的观测。其次是在数据处理和分
析阶段,找出有特别兴趣或意义的观测。
Stata 的数学命令比较简单,没有很复杂的用法。具体使用时查一下工具手册就可以。
7
CCER04 硕 邹传伟 2006 年 1 月
4.数据管理
前边介绍了生成数据文件,读入其它格式的数据,以及修改数据文件的一些方法。这一
部分继续介绍数据管理的其它方法。
4.1 改变变量名
rename old_varname new_varname
old_varname 是原变量名,new_varname 是新变量名。
4.2 生成新变量
generate newvar = exp [if exp] [in range]
newvar 是生成的新变量,exp 是由现有变量生成新变量的算术或逻辑表达式,[if exp] 和
[in range]指定对哪些观测计算新变量值。
比如,generate age2 = age*age (新变量 age2 等于 age 的平方),
generate biginc = income>100000 & income~=. (若 income 大于 100000 且不缺失,
则新变量 biginc 为 1,否则为 0)。
4.3 对现有变量重新赋值
replace oldvar = exp [if exp] [in range]
oldvar 为现有的变量。对满足[if exp]和[in range]的样本,oldvar 将根据表达式 exp 重新
赋值。
比如,replace income=. if income<=0 (若 income 非正,令其取缺失值),
replace age = 25 in 1007 (令第 1007 个观测中 age 为 25)。
4.4 删除变量或观测
drop varlist (去掉 varlist 指定的变量)
drop _all (去掉全部变量)
drop if exp (去掉符合表达式 exp 的观测)
drop in range (去掉处在 range 指定范围内的观测)
4.5 保留变量或观测
keep varlist (保留 varlist 指定的变量,其余变量去掉)
keep if exp (保留符合表达式 exp 的观测,其余观测去掉)
keep in range (保留处在 range 指定范围内的观测)
8