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

发布时间:2021-09-12 阅读 6660

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

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

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装命令如下:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh

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

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

⛳ Stata 系列推文:

作者:谢作翰 | 连玉君 | (知乎 | 简书 | 码云)

编者按:从本期开始,Stata 连享会将推出「Stata 小白系列」推文,介绍数据导入、命令语法等 Stata 入门知识,以帮助各位尽快掌握 Stata 的基本操作。需要注意的是,本文所有数据可通过 lxhget xzhstata.pkg, replace 命令获取。


目录


1. 数据拆分

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

1.1 数据的横向拆分

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

. sysuse auto.dta, clear
. drop weight length
. save auto_sim01.dta, replace

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

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

. sysuse auto.dta, clear
. keep make price mpg rep78 foreign
. save auto_sim02.dta, replace

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

1.2 数据的纵向拆分

原始数据有时包含过多的样本观测值,但在实际应用中可能根据需要将其按某种特征拆分为不同的数据表,这是就要实现数据的纵向拆分。此时,仍然可以使用 dropkeep 命令。例如,将 auto.dta 数据文件拆分为两个数据文件:auto_domestic.dta 和 auto_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 的扩展版)。

*命令安装
cnssc install savesome, replace
*命令语法
savesome [varlist] [if exp] [in range] using filename [, old
         save_options]

其中,

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

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

. sysuse auto.dta, clear
. savesome make price mpg rep78 foreign using auto_sim02.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]

其中,merge 为合并的命令语句,[varlist] 代表用以合并的变量,using filename 指的是与原文件进行合并的文件。options 具体选项如下:

  • keep(varlist):只保留 filename 中特定的变量;
  • _merge(newvar):合并之后生成的新变量,默认名称为 _merge;
  • nolabel:不要复制 filename 中所定义的标签;
  • nonotes:不要复制 filename 中所定义的注释;
  • update:用 filename 中的数据代替内存中的缺失值;
  • replace:用 filename 中的数据代替内存中中的非缺失值;
  • nokeep:删除数据库中不能匹配的观测值;
  • nosummary:删除 summary 变量;
  • unique:匹配变量在原文件与合并文件中都是唯一的;
  • uniqmaster:匹配变量在原文件中必须是唯一的;
  • uniqusing:匹配变量在用以合并文件中必须是唯一的;
  • sort:合并前进行排序。

利用数据文件 waterinput 和 wateroutput 实现数据的横向合并,匹配变量为 year,生成新的数据文件命名为 waternew。

. use wateroutput.dta, clear
. sort year
. save wateroutput.dta, replace

. use waterinput.dta, clear
. sort year
. merge year using wateroutput.dta
. save waternew.dta, replace

2.2 数据的纵向合并

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

append using filename [, options] 

在这个命令语句中,append 是进行纵向合并的命令语句,using filename 是进行纵向合并的文件路径,[, options] 的内容与 merge 相似,但更为简化。例如,利用数据文件 auto_domestic.dta 和 auto_foreign 实现数据的纵向合并,生成的数据文件命名为 autonew.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

. use auto_domestic.dta, clear
. append using auto_foreign.dta
. save autonew.dta, replace

2.3 合并多个 csv 文件

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

*命令下载
cnssc install csvconvert, replace
*命令语法
csvconvert input_directory, replace [options] 

其中,options 选项如下:

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

3. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 拆分 合并 清洗, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,400+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

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

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

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh