D5. egen 系列函数
整理: 陈贤孟 (厦门大学)
邮箱: cxminjnu@163.com
1. egen 命令简介
egen
(Extention to generate) 是 gen
的扩展,提供了大量生成新变量的函数,其中主要有生成变量的统计量(均值、标准差、中位数等)、对变量进行编码、对变量进行标准化等。在研究工作的开展过程中,灵活使用 egen
提供的函数有助于我们提高工作效率。
egen
的语法结构如下:
egen [type] newvar = fcn(arguments) [if] [in] [, options]
1.1 简单例子
下面我们通过调用 Stata 中的 “nlsw88.dta”
数据,演示如何使用 egen
命令生成行业工资水平中位数、行业工资水平标准差和根据行业类别与职业对数据进行重新编码。
sysuse "nlsw88.dta", clear //调用数据
sort industry wage //根据行业和工资水平进行排序
*-计算行业工资水平中位数 bysort industry: egen wage_p50 = median(wage) //计算行业工资水平中位数
gen wage_diff = wage-wage_p50 //计算个体工资水平与其所在行业中位数的差异
*-计算行业工资水平标准差 bysort industry: egen wage_sd = sd(wage) //运用 egen 命令的 sd 函数计算标准差
*-根据个体所属行业和职业类别,对样本进行重新编码
sort industry occupation //根据行业和职业类别进行排序
egen indocc123 = group(industry occupation) //运用 group 函数对样本进行重新编码
更多关于 egen
命令提供的函数,可以通过查看 Stata 提供的帮助文档进行了解
help egen // 查看官方命令提供的函数
2. egen 函数应用范例
在国际贸易领域的研究中,企业会将产品出口到不同的国家,在计算企业面临的实际汇率时,往往不是对各国汇率进行简单地算数平均,常见的计算方法为以企业的出口额为权重,计算企业几何加权实际汇率,具体公式如下所示:
\[EER=\prod_{i=1}^{n}(X_i^{W_i})\]
即
\[EER=X_1^{W_1} \times X_2^{W_2} ... \times X_n^{W_n}\]
其中, \(X=\text{exchange}\),\(W=\text{weight}\),\(\sum_{i=1}^{n}W_i=1\)。
下面结合实际例子,说明如何运用 egen
命令完成企业几何加权实际汇率的计算。
clear //清空内存
* firm: 企业编号 country: 出口目的国export: 出口额
* exch: 汇率
//输入数据
export
input firm country exch
1 1 8 60
1 2 0.03 50
1 3 10 80
2 2 0.03 68
2 4 3 80
3 2 0.03 200
3 3 10 90
3 4 3 250
3 5 1.1 120end
*-计算权重bysort firm: egen weight = pc(export), prop //计算每家公司出口到各个国家的权重
list, sepby(firm) //分公司列举计算结果
+-------------------------------------------+export weight |
| firm country exch
|-------------------------------------------|
1. | 1 1 8 60 .3157895 |
2. | 1 2 .03 50 .2631579 |
3. | 1 3 10 80 .4210526 |
|-------------------------------------------|
4. | 2 2 .03 68 .4594595 |
5. | 2 4 3 80 .5405405 |
|-------------------------------------------|
6. | 3 2 .03 200 .3030303 |
7. | 3 3 10 90 .1363636 |
8. | 3 4 3 250 .3787879 |
9. | 3 5 1.1 120 .1818182 |
+-------------------------------------------+
*-计算 EER,由于几何加权实际汇率是连乘的形式,取对数可以方便计算gen lnexch = ln(exch) //取对数处理
gen lnexch_x_weight = lnexch*weight
bysort firm: egen sum_exch = total(lnexch_x_weight) //将连乘转为连加的形式
gen EER = exp(sum_exch) //将上述计算结果取指数,得到 EER
*-查验结果list firm-weight EER, sepby(firm) //查验计算结果
+------------------------------------------------------+export weight EER |
| firm country exch
|------------------------------------------------------|
1. | 1 1 8 60 .3157895 2.020605 |
2. | 1 2 .03 50 .2631579 2.020605 |
3. | 1 3 10 80 .4210526 2.020605 |
|------------------------------------------------------|
4. | 2 2 .03 68 .4594595 .3615783 |
5. | 2 4 3 80 .5405405 .3615783 |
|------------------------------------------------------|
6. | 3 2 .03 200 .3030303 .7296909 |
7. | 3 3 10 90 .1363636 .7296909 |
8. | 3 4 3 250 .3787879 .7296909 |
9. | 3 5 1.1 120 .1818182 .7296909 | +------------------------------------------------------+
3. egen 命令的扩展
为了满足研究工作的需要,Stata 用户对 egen
函数进行了一定的扩展,其中主要有 egen_inequal
(生成不平等和贫困指数的函数)、 egenmmed
(生成移动中位数) 、 egenmore
、 ereplace
等,这里我们重点介绍一下 egenmore
和 ereplace
。
3.1 egenmore 简介
egenmore
是 egen
一个十分重要的扩展,为我们在文字处理、时间序列数据的处理等方面提供了便利,此处主要对 egenmore
提供的部分文字处理函数进行介绍。
string
*-ntos() 函数: number to sysuse auto, clear
"优秀"到"差",并将结果保存在变量 grade 中
*将 rep78 中的 1 到 5 依次转换为egen grade = ntos(rep78), from(1/5) to ("优秀" "好" "较好" "较差" "差")
list rep78 grade in 1/5
+---------------+
| rep78 grade |
|---------------|
1. | 3 较好 |
2. | 3 较好 |
3. | . |
4. | 3 较好 |
5. | 4 较差 |
+---------------+
*-ston() 函数的用法与之类似
*-incss() 函数:在查询一些重要的关键词时可以发挥一定作用
use bank_number.dta, clear //调用一份包含银行和非银行金融机构的数据
*运用 incss 函数对银行机构进行标记,若字符串中包含“银行”二字,标记为1
egen isbank = incss(objbank), substr("银行")
drop if isbank==0 //删除非银行金融机构
3.2 ereplace 简介
ereplae
是在 egen
和 egenmore
的基础上进行了扩展,ereplace
允许用户运用 egen
或 egenmore
中的函数对已有变量进行替换,即将函数的运算结果存储在已有变量中。
ereplace
的语法结构如下:
type] varname = fcn(arguments) [if exp] [in range] [, options] ereplace [
简单示例
sysuse auto, clear
std(price) //将价格替换为标准化后的价格
ereplace price=" ") //调用 egenmore 中的 sieve 函数,此处的作用为删去 make 变量中的空格 ereplace make= sieve(make), omit(
4. 总结
egen
命令的功能十分强大,提供了各类生成新变量的函数, egenmore
和 ereplace
等的出现,进一步强化了egen
的功能,熟悉egen
提供的各种函数,将大大提升数据处理工作的效率。
5. 扩展阅读
- 连小白, 2025, 同伴效应研究中的关键指标:Peer Mean 的计算方法, 连享会 No.1560.
- 连玉君, 2020, Stata新命令:ereplace-egenmore-egenmisc, 连享会 No.335.
- 连玉君, 2020, Stata:gen 和 egen 中的 sum() 函数异同, 连享会 No.174.