Stata小白系列之二:数据拆分与合并

发布时间:2020-10-07 阅读 59

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

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

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

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

作者:谢作翰 | 连玉君


目录


数据文件下载:链接: https://pan.baidu.com/s/1qXRh9EG 密码: 5ltw

1. 数据拆分

如果把内存中的数据集视为一个矩阵,则我们对数据的基本操作包括两类:删除或删除。对于 Stata 而言,命令的主要操作对象是变量 (矩阵的),而有些时候我们也需要删除特定的观察值 (矩阵的)。这些操作都可以配合使用 dropkeep 命令来实现。

1.1 删除\保留变量:数据的横向拆分

原始数据有时包含过多的变量,但在实际应用中可能根据需要将原始数据拆分为不同的数据表,这时就要实现数据的横向拆分。数据的横向拆分用到的两个命令为 dropkeep

Stata 范例:

sysuse "auto.dta", clear
drop weight length
save "d:\data\auto_sim01.dta", replace

我们调入数据后,使用 drop 命令删除了两个变量,进而把处理后的数据文件另存到 D:\data 文件夹中。若该文件夹下已经存在一个名称为 auto_sim01.dta 则自动覆盖之,这是 replace 选项的作用。

按照上述思路,也就不难理解如下命令的含义了:

sysuse "auto.dta", clear
keep  make price mpg rep78 foreign
save "d:\data\auto_sim02.dta", replace

特别说明: 一般而言,除非数据文件非常大导致每次调入耗时较长,我们很少另存数据文件。我们会将主要的修改动作都保留于 dofile 中。每次分析时,只需修改 dofile 或执行 dofile 中的特定语句即可实现对子样本的处理。毕竟,dofile 本质上是文本文件,文件大小通常不过几十 k。

1.2 删除\保留观察值:数据的纵向拆分

原始数据有时包含过多的样本观测值,但在实际应用中可能根据需要将其按某种特征拆分为不同的数据表,这是就要实现数据的纵向拆分。此时,仍然可以使用 dropkeep 命令。

例如将 auto.dta 数据文件拆分为两个数据文件:auto_domestic.dtaauto_foreign.dta,操作如下:

sysuse "auto.dta", clear
keep if foreign==0
save auto_domestic.dta, replace 

sysuse "auto.dta", clear
keep= if foreign==1
save auto_foreign.dta, replace

1.3 一步到位保存数据子集:savesome 命令

通过上述范例可以看出,使用 Stata 自带的 keepdrop 命令可以快捷地删除变量或观察值,但在命令写法上较为繁琐。我们可以使用外部命令 savesome 来提高效率 (该命令是 Stata 官方命令 save 的扩展版):

  • 安装程序文件:
ssc install savesome, replace

在命令窗口中输入 help savesome 可以查看该命令的帮助文件,其语法格式如下:

savesome [varlist] [if exp] [in range] using filename [, old save_options]

其中,

  • using filename 表示要保存的子集文件名及文件路径;
  • old 是较为重要的选项,可以将数据保存为较低版本的文件格式,如 stata15 用户可以将数据另存为在 stata14 或以下版本中的打开的数据文件。类似的命令还有 Stata 官方命令 saveold

Stata 范例 1:

对于前文提到的例子,我们可以使用 savesome 来实现相同的功能:

sysuse "auto.dta", clear
keep  make price mpg rep78 foreign
save "d:\data\auto_sim02.dta", replace

等价于

sysuse "auto.dta", clear
savesome make price mpg rep78 foreign ///
     using "d:\data\auto_sim02.dta", replace

评论: 凭心而论,笔者更喜欢前一种方式。虽然多写了一行命令,但思路清晰,也便于记忆。

Stata 范例 2:

sysuse "auto.dta", clear
keep if foreign==0
save auto_domestic.dta, replace 

等价于:

sysuse "auto.dta", clear
savesome if foreign==0 using auto_domestic.dta, replace 

2. 数据合并

2.1 数据的横向合并

数据的横向合并是横向拆分的逆操作,但是其要比拆分复杂。对于时间序列资料而言,要保证同一时点的两个变量的观察值对接到同一行;而对于界面个体资料而言,要保证同一个人的年龄数据与该人的收入数据在同一行。而对于面板数据资料,则需数据中有两个变量能够唯一标示每一行观察值,以保证 A 数据文件中的 “张三疯-2016” 与 B 数据文件中的 “张三疯-2016” 处于同一行。合并所使用的命令语句为 merge,具体语句如下所示:

merge [varlist] using filename [filename ...] [, options]

具体说明如下:

  • [varlist] 代表用于关联两份数据的「连接变量」
  • using filename 用于指定待合并文件的名称和路径
  • options 包含较多的功能,表 2.11 显示了其具体内容。

举例:利用横向拆分实验中生成的数据文件 waterinputwateroutput 实现数据的横向合并,匹配变量为 year,生成新的数据文件命名为 waternew。这个操作的命令为:

use c:\data\wateroutput, clear
sort year
save c:\data\wateroutput, replace
use c:\data\waterinput, clear
sort year
merge year using c:\data\wateroutput
save c:\data\waternew, replace

在以上命令语句中,第一个命令语句实现了 wateroutput 数据文件的打开,第二个命令语句将文件按年份变量进行排序,第三个命令语句保存了排序之后的数据文件,第四个命令语句实现了 waterinput 数据文件的打开,第五个命令语句将此数据按年份变量进行排序,第六个命令语句按年份变量将 wateroutput 文件合并到 waterinput 文件中,第七个命令语句保存合并之后的数据文件。

2.2 数据的纵向合并

数据的纵向合并为数据纵向拆分的逆操作,使用的主要命令为 append 命令,具体语句如下:

append using filename [, options] 

在这个命令语句中, append 是进行纵向合并的命令语句, using filename 是进行纵向合并的文件路径, [, options] 的内容与 merge 相似,但更为简化。

例如,利用纵向拆分实验中生成的数据文 domesticautoforeignauto 实现数据的纵向合并,生成的数据文件命名为 usaautonew。这个操作的命令为:

use "c:\data\domesticauto, clear"
append using "c:\data\foreignauto.dta"
save "c:\data\usaautonew.dta", replace

在以上命令中,第一个命令语句打开了原始数据文件,第二个命令将 foreignauto 文件合并到 domesticauto 文件中,第三个命令语句存储了合并后的数据文件。

3. 一次合并多个 csv 文件 —— csvconvert

csvconvert 命令用于将多个 csv 格式文件合并为一个 .dta 格式文件,比较适合处理具有时间周期性特点的变量。命令为:

 csvconvert input_directory , replace [options] 

该命令有三个参数:

  • output_file(file_name) 设置输出文件名
  • output_dir(output_directory) 设置输出路径
  • input_file(.csv file list) 选择要合并的文件

该命令为外部命令,需要预先安装:

ssc install csvconvert, replace
help csvconvert

以命令配套的四个世界银行文件为例,首先看文件结构

dir C:\Uers\Administrator\Desktop\stata学习文件\worldbank\*.csv

wb2010.csv

使用 csvconvert 命令将四个年度数据纵向合并

csvconvert  C:\Users\Administrator\Desktop\stata学习文件\worldbank, replace
默认情况下合并后的文件名为output.dta
默认情况下合并后的文件名为output.dta

要合并的四个子文件必须在同一个文件夹中,默认情况下, csvconvert 命令会合并文件夹中所有文件 ,可以用 note 命令核对所合并的文件情况 .用 input_file 参数选择所有合并的文件名,在此,我们只选择2008年度和2009年度的数据

csvconvert C:\Users\Administrator\Desktop\stata学习文件\worldbank
, replace input_file(wb2008.csv wb2009.csv)

本文中所用数据文件下载地址:

数据文件:链接: https://pan.baidu.com/s/1qXRh9EG 密码: 5ltw

相关课程

连享会-直播课 上线了!
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