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,246of Wgt. 2,246
25% 4.259257 1.344605 Sum
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.85446
bysort
前缀:根据类别变量进行分组统计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)
.
statistics: mean
Summary 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.1 通配符:-
要对数据集第 2-6 个变量描述统计,常规方法:
sum age race married never_married grade
使用通配符 -
sum age-grade // 只需列出头尾两个变量
2.2 通配符:*
可代表任意字符:
sum s* // 以 s 开头的变量
.
Variable | Obs Mean Std. Dev. Min Max
---------+-------------------------------------
south | 2,246 .4194123 .4935728 0 1 smsa | 2,246 .7039181 .4566292 0 1
除此之外,*
可以放在任何位置
sum *arr* // 任何中间包含 `arr` 的变量
.
Variable | Obs Mean Std. Dev. Min Max
-------------+-------------------------------------
married | 2,246 .6420303 .4795099 0 1d | 2,246 .1041852 .3055687 0 1 never_marr~
2.3 通配符:?
?
的作用与 *
类似,但只能指代一个字符,因此较少使用。
更多详细用法,可通过命令 help varlist
([U] 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) 查看。
5. 相关推文
- 严子凯, 2020, 滚动吧统计量!Stata数据处理, 连享会 No.139.
- 徐婷, 2020, Stata:时间虚拟变量还是时间趋势项?, 连享会 No.394.
- 徐婷, 徐云娇, 2020, 傻傻分不清:时间趋势项与时间虚拟变量, 连享会 No.147.
- 李胜胜, 2021, 滚动计算:rangerun和rangestat命令简介, 连享会 No.545.
- 杨柳, 连玉君, 2020, Stata因子变量:虚拟变量-交乘项批量处理, 连享会 No.180.
- 王俊, 2020, Stata:滚动回归的四个命令-rolling, 连享会 No.487.
- 袁瑜彤, 2022, Stata:因子变量系数引用技巧-coeflegend, 连享会 No.1090.
- 连玉君, 杨柳, 2020, Stata:因子变量全攻略, 连享会 No.160.