Stata转Excel:export-excel-命令详解

发布时间:2020-10-09 阅读 34

Stata 连享会   主页 || 视频 || 推文

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

课程详情 https://gitee.com/arlionn/Course   |   lianxh.cn

课程主页 https://gitee.com/arlionn/Course

作者:李刚 (中南财经政法大学)
邮箱:gang.li.0814@gmail.com


目录


1. 应用背景

数据处理过程中,通常面临数据集格式转换的难题,相比 Stata 的 .dta 数据文件,使用更广泛的是 Excel 数据。那么如何将 .dta 数据转换成以 .xls.xlsx 后缀的 Excel 数据呢?

本文介绍的 export excel 命令便是主要解决此问题。下面将围绕用法应用案例两方面展开,主要介绍命令的使用。

若采用窗口操作,相应的流程为:File → Export → Data to Excel spreadsheet(_.xls; _.xlsx)

下面,我们分两个小节,分别介绍 export excel 的基本语法和各个选项。

2. 基本语法

export excel 的基本语法如下:

export excel [using] filename [if] [in][, export_excel_options]

  • 其中,export excel 为命令主体,不可省略;
  • using 为指定使用的文件,导出整个数据集时可省略;
  • filename 为导出的 Excel 文件名;
  • ifin 可限定要导出的数据的范围;
  • export_excel_options 为在基础命令上添加的选项,详细介绍见 2.2 小节。

若只需导出部分变量名,则可在excel export 后面添加相应的变量名,需要注意,此时的 using 不可省略,对应的语法如下:

export excel [varlist] using filename [if] [in][, export_excel_options]

3. 选项介绍

export excel 包含了丰富的选项,下面从主要选项 (Main Options) 和其他选项 (Advanced Options) 两方面进行介绍,并重点选取数据处理常用的进行详细说明。

3.1 主要选项 (Main Options)

选项 用途
replace 覆盖已有文件
firstrow(variables or varlabels) 设置导出数据第一行为变量名还是变量标签
sheet("sheetname") 指定 sheetname
cell(start) start (upper-left) 开始写入数据
sheetmodify 不修改导出范围之外的数据,不能和 sheetreplace replace 选项连用
sheetreplace 导出之前先将 sheet 数据清除 ,不能和 sheetreplace replace 选项连用
nolabel 导出变量值,而不是变量的值标签
keepcellfmt 保留已有表格的单元格格式

值得说明的是:常用的是 sheet("sheetname") firstrow(variables|varlabels) replace 选项。

  • sheet() 选项可以指定导出到 Excel 时数据的 sheet 名称,可是实现按需求修改 sheet 名的功能,套用在循环中使用比较方便,可以参见下文 3.1 小节 Task2 中的用法。
  • firstrow(variables|varlabels)选项可以指定导出到 Excel 时表头为变量名还是变量标签,当不添加 firstrow 选项时,默认时导出数据,不包含变量名
  • replace 选项如同其他命令中的用法,覆盖已有数据,一般必选,否则报错 file already exists但当使用sheet() 选项时repalce 可以省略,表示在一份 Excel 表格中写入多张 sheet **。

下面为大家演示 sheet("sheetname")firstrow(variables|varlabels) 的使用效果,注意仔细观察导出的 Excel 文件 sheet 名表头 的区别。

sysuse auto, clear

* 设定 Excel 文件的子表 (Sheet) 名
export excel using "auto.xls", replace sheet("auto")

//结果:注意观察 Excel 文件的 Sheet 名

* 导出Excel的表头为变量名
preserve
  keep make price mpg rep78
  export excel using "auto_varname.xls", firstrow(variable) replace
restore

/*结果:auto_varname.xls 的前三行
make		price	mpg	rep78
AMC Concord	4,099	22	3
AMC Pacer	4,749	17	3
*/

*设定导出Excel的表头为变量名
preserve
  keep make price mpg rep78
  export excel using "auto_varlabel.xls", firstrow(varlabel) replace
restore

/*结果:auto_varlabel.xls 的前三行
Make and Model	Price	Mileage (mpg)	Repair Record 1978
AMC Concord	4,099	22	        3
AMC Pacer	4,749	17	        3
*/

3.1 其他选项 (Advanced Options)

选项 用途
datestring(datetime_format) 将时间格式数据导出为字符型
missing(repval) 将缺失值导出为指定的缺失值标记(repval),字符型或数值型均可,
如无此选项,默认导出为空格
locale(locale) 当使用扩展的 ASCII 字符集可能需要此选项。默认的环境为 UTF-8

4. 应用案例

4.1 案例一

按照 rep78 变量(汽车 1978 年维修次数) 将 auto.dta 拆分成 Excel 格式的子集 。

  • Task1: 按照 auto_rep78_i_.xls 命名文件,其中 i 表示相应维修次数;
  • Task2: 生成 auto_rep78_all.xls数据集,其中一个 Sheet 对应一个子集。

提示:解决这两个问题的关键在于 2.2 部分重点介绍的 sheet("sheetname")firstrow(variables|varlabels) 两个选项的使用。

sysuse auto, clear

tabulate rep78  //列表呈现 rep78 的类别和频数分布

levelsof rep78,local(rep)
foreach i in `rep'{
	preserve
	keep if rep78 == `i'
	export excel using "auto_rep78_`i'.xls", firstrow(variable) replace
	export excel using "auto_rep78_all.xls", firstrow(variable) sheet(`i')
	restore
	}

4.2 案例二

使用 export excel 导出 nlsw88.dta数据集的 变量名变量标签 ,存在namevarlabel两列,文件名为 nlsw88_varname_varlab.xls

处理思路: 导入 nlsw88.dta 数据 --> 使用 firstrow(variable) 选项获取变量名 (Data1) --> 使用 firstrow(varlabel) 选项获取变量标签(Data2) --> 合并 Data1Data2 --> 由行转置为列 。

sysuse nlsw88, clear

*获取变量名
preserve
  export excel using "nlsw88_varname.xls" in 1,firstrow(variable) replace
  import excel using  "nlsw88_varname.xls", clear
  keep in 1
  save "nlsw88_varname.dta", replace
restore

*获取变量标签
export excel using "nlsw88_varlab.xls" in 1, firstrow(varlabels) replace
import excel using  "nlsw88_varlab.xls", clear
keep in 1
save "nlsw88_varlab.dta", replace

*合并、转置
use "nlsw88_varname.dta", clear
append using "nlsw88_varlab.dta"
sxpose, clear
rename _var1 varname
rename _var2 varlabel
list varname  varlab, noobs
export excel using "nlsw88_varname_varlab.xls",firstrow(variable) replace

/*
  +-----------------------------------------+
  |       varname                  varlabel |
  |-----------------------------------------|
  |        idcode                    NLS id |
  |           age       age in current year |
  |          race                      race |
  |       married                   married |
  | never_married             never married |
  |-----------------------------------------|
  |         grade   current grade completed |
  |      collgrad          college graduate |
  |         south            lives in south |
  |          smsa             lives in SMSA |
  |        c_city     lives in central city |
  |-----------------------------------------|
  |      industry                  industry |
  |    occupation                occupation |
  |         union              union worker |
  |          wage               hourly wage |
  |         hours        usual hours worked |
  |-----------------------------------------|
  |       ttl_exp     total work experience |
  |        tenure        job tenure (years) |
  +-----------------------------------------+
*/

小彩蛋:describe, replace 命令可以快速实现上述需求,将数据集的 position, name, type, isnumeric, format, vallab, varlab 导出到一个新的数据集。

sysuse nlsw88, clear
describe, replace
describe
list name varlab, noobs
keep name varlab
export excel using "nlsw88_varname_varlab.xls",firstrow(variable) replace

5. 附:文中所有代码

* ##2.2 介绍 firstrow 和 sheet 的使用
sysuse auto, clear
*设定Excel文件的Sheet名
export excel using “auto.xls", replace sheet("auto")

*导出Excel的表头为变量名
preserve
  keep make price mpg rep78
  export excel using "auto_varname.xls", firstrow(variable) replace
restore

*设定导出Excel的表头为变量名
preserve
  keep make price mpg rep78
  export excel using "auto_varlabel.xls", firstrow(varlabel) replace
restore

* ## 3.1 案例一
sysuse auto, clear
levelsof rep78,local(rep)
foreach i in `rep'{
	preserve
	keep if rep78 == `i'
	export excel using "auto_rep78_`i'.xls", firstrow(variable) replace
	export excel using "auto_rep78.xls", firstrow(variable) sheet(`i')
	restore
	}

* ## 3.2 案例二
sysuse nlsw88, clear

*获取变量名
preserve
  export excel using "nlsw88_varname.xls" in 1,firstrow(variable) replace
  import excel using  "nlsw88_varname.xls",clear
  keep in 1
  save "nlsw88_varname.dta", replace
restore

*获取变量标签
export excel using "nlsw88_varlab.xls" in 1, firstrow(varlabels) replace
import excel using  "nlsw88_varlab.xls",clear
keep in 1
save "nlsw88_varlab.dta", replace

*合并、转置
use "nlsw88_varname.dta", clear
append using "nlsw88_varlab.dta"
sxpose, clear
rename _var1 varname
rename _var2 varlabel
list varname  varlab, noobs
export excel using "nlsw88_varname_varlab.xls",firstrow(variable) replace

相关课程

连享会-直播课 上线了!
http://lianxh.duanshu.com

免费公开课:


课程一览

支持回看,所有课程可以随时购买观看。

专题 嘉宾 直播/回看视频
最新专题 DSGE, 因果推断, 空间计量等
Stata数据清洗 游万海 直播, 2 小时,已上线
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,300+ 推文,实证分析不再抓狂。
  • 公众号推文分类: 计量专题 | 分类推文 | 资源工具。推文分成 内生性 | 空间计量 | 时序面板 | 结果输出 | 交乘调节 五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会主页  lianxh.cn
连享会主页 lianxh.cn

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD