B3. Stata 命令的语法格式
整理人:赵翔宇(中国人民大学)
邮箱:zhaoxiangyuf@163.com
Stata 编程最基本的是要掌握 Stata 命令的语法格式,本文将从4个方面介绍 Stata 常用的语法格式。
1. Stata 的一般语法格式
首先以 summarize 命令为例,介绍其语法以说明语法的一般格式。了解语法格式可通过 help 命令,help summarize 部分结果下图。

- 命令名称中的下划线部分表示该命令可以简写为
su [*]代表可选项,可加可不加varlist为变量列表,是用户设定的一个或多个变量名称
. sysuse "nlsw88.dta", clear
. sum wage hours
Variable | Obs Mean Std. Dev. Min Max
----------+--------------------------------------------------
wage | 2,246 7.766949 5.755523 1.004952 40.74659
hours | 2,242 37.21811 10.50914 1 80[if]选项:满足特定条件的子样本
. sum wage if race==1 // 限定样本为 race==1时的子样本
Variable | Obs Mean Std. Dev. Min Max
----------+--------------------------------------------------
wage | 1,637 8.082999 5.955069 1.004952 40.19808[in]选项:限定观察值范围
. sum wage in 1/10 // 对前10个观测的 wage 进行描述
Variable | Obs Mean Std. Dev. Min Max
----------+------------------------------------------------
wage | 10 9.343055 3.89733 4.62963 17.20612[, options]:其它选项。这里以detail选项为例介绍
. sum wage, detail // wage 的详细信息
hourly wage
---------------------------------------------------------
Percentiles Smallest
1% 1.930993 1.004952
5% 2.801002 1.032247
10% 3.220612 1.151368 Obs 2,246
25% 4.259257 1.344605 Sum of Wgt. 2,246
50% 6.27227 Mean 7.766949
Largest Std. Dev. 5.755523
75% 9.597424 40.19808
90% 12.77777 40.19808 Variance 33.12604
95% 16.52979 40.19808 Skewness 3.096199
99% 38.70926 40.74659 Kurtosis 15.85446bysort前缀:根据类别变量进行分组统计Stata 支持多种前缀写法,大大提高了命令的灵活性和执行效率,详见
help prefix。
. bysort married: sum wage // 分婚姻状态对 wage 描述统计
-----------------------------------------------------------------------
-> married = single
Variable | Obs Mean Std. Dev. Min Max
----------+----------------------------------------------
wage | 804 8.080765 6.336071 1.151368 40.19808
-----------------------------------------------------------------------
-> married = married
Variable | Obs Mean Std. Dev. Min Max
----------+--------------------------------------------------
wage | 1,442 7.591978 5.399229 1.004952 40.74659注意事项
逗号后为 options, 整条命令只能有一个「裸露」在外的逗号,各个选项之间无需重复添加逗号。
. sysuse nlsw88, clear
. tabstat wage hours married age, by(race) s(mean) f(%3.2f)
Summary statistics: mean
by categories of: race (race)
race | wage hours married age
-------+----------------------------------------
white | 8.08 36.90 0.70 39.27
black | 6.84 38.12 0.47 38.81
other | 8.55 36.81 0.69 39.31
-------+----------------------------------------
Total | 7.77 37.22 0.64 39.15
------------------------------------------------其他更具体的语法说明可通过命令 help language 查看。
2. 变量的引用
任何统计分析都是以变量为基础的,为使数据分析更加高效,熟悉引用变量非常关键。
通配符 可以使变量引用变得更简捷,以下将以系统文件 nlsw88.dta 为例,介绍三种常用通配符。
sysuse "nlsw88.dta", clear通配符:
-要对数据集第2-6个变量描述统计,常规方法:
stata sum age race married never_married grade使用通配符-stata sum age-grade // 只需列出头尾两个变量通配符:
*可代表任意字符 ```stata . sum s* // 以 s 开头的变量
Variable | Obs Mean Std. Dev. Min Max————-+——————————————————— south | 2,246 .4194123 .4935728 0 1 smsa | 2,246 .7039181 .4566292 0 1
除此之外,`*` 可以放在任何位置 ```stata . sum *arr* // 任何中间包含 `arr` 的变量 Variable | Obs Mean Std. Dev. Min Max -------------+--------------------------------------------------------- married | 2,246 .6420303 .4795099 0 1 never_marr~d | 2,246 .1041852 .3055687 0 1通配符:
?与
*类似,但只能指代一个字符,因此较少使用。
更多详细用法,可通过命令 help varlist 查看。
3. 因子变量:变量的前缀
在回归分析时,对因子变量采用前缀(i.)能够跳过生成虚拟变量的步骤,提高效率。
在系统数据集 nlsw88.dta 中,考虑因子变量 race :
. tab race
race | Freq. Percent Cum.
------------+-----------------------------------
white | 1,637 72.89 72.89
black | 583 25.96 98.84
other | 26 1.16 100.00
------------+-----------------------------------
Total | 2,246 100.00考虑一个自变量包含 race 的回归分析:
reg wage tenure hours i.race i.industry // 种族和行业都是虚拟变量,省去了另生成虚拟变量的步骤。此外,当回归分析中需要引入交乘项 时,可以通过 # 使输入更加简捷。
reg wage tenure hours i.marr i.marr#c.hours // 交乘项该命令等价于
reg wage tenure i.marr##c.hours // 当交乘项的两个变量也在自变量中,可用 `##` 代替这两个变量单独输入。注意:当交乘项为两个相同变量组成时,即为该变量的平方项。
更多详细用法,可通过命令 help fvvarlist ([U] fvvarlist) 查看。 如下推文对此也进行了详细介绍:
- 连玉君, 杨柳, 2020, Stata:因子变量全攻略, 连享会 No.160.
4. 时间序列变量的简写
假设时间序列变量 \(x_t\) (或 \(x_{it}\)),各简写命令如下表所示。
| 命令 | 含义 | 示例 |
|---|---|---|
| L. | 一阶滞后项 | \(L.x=x_{t-1}\) |
| F. | 一阶前推项 | \(F.x = x_{t+1}\) |
| D2. | 一阶差分项 | \(D.x = x_t - x_{t-1}\) |
| D2. | 二阶差分项 | \(D2.x = (x_t - x_{t-1}) - (x_{t-1} - x_{t-2})\) |
| S2. | 2 步长差分项 | \(S2.x = x_{t} - x_{t-2}\) |
利用系统数据集 sp500.dta,可以进一步了解时间序列变量简写的应用。
sysuse "sp500.dta", clear
tsset date
gen t = _n // 生成连续变量
tsset t
gen lnP = ln(close) // 股票收盘价的对数
gen return = D.lnP // 生成收益率(一阶差分)
gen Lreturn = L.return // 前一天的收益率(一阶滞后项)
gen L2return = L2.return // 前两天的收益率(二阶滞后项)我们可以列出前六个观察值以查验变量生成机制:
. format lnP return L* %6.4f
. list date t lnP return L* in 1/6, clean noobs
date t lnP return Lreturn L2return
02jan2001 1 7.1572 . . .
03jan2001 2 7.2061 0.0489 . .
04jan2001 3 7.1954 -0.0106 0.0489 .
05jan2001 4 7.1688 -0.0266 -0.0106 0.0489
08jan2001 5 7.1669 -0.0019 -0.0266 -0.0106
09jan2001 6 7.1707 0.0038 -0.0019 -0.0266在回归中,可以不产生这些变量而直接应用,例如,对于如下模型:
\[R_t = \alpha + \sum_{p=1}^{3} \beta_{p} R_{t-p} + \sum_{q=1}^{2} \beta_{q} R_{t+q} + u_t\]
相应的 Stata 命令可以简写为:
reg return L(1/3).return F(1/2).return 更多详细用法,可通过命令 help tsvarlist ([U] tsvarlist) 查看。