作者:江小白
邮箱:jieresearch@163.com

我们在使用stata进行数据分析时,可能涉及多个数据文档的合并操作或者同时使用不同数据集中的多个变量,这都需要我们进行文档间不同变量的归并。
例如,我们需要使用CFPS(中国家庭追踪调查)数据库进行实证分析,而申请拿到的原始数据中包含成人数据库,儿童数据库,家庭关系库等多个数据集,我们需要的变量分散在这些数据集中,此时就需要将不同数据库中的不同变量放到一起;再譬如我们需要CFPS多期的调查数据构建多期面板,这又需要我们把多期的数据合并到一起...

在stata中就为我们提供了mergeappend 等命令以实现多个数据文件的「横向合并」「纵向合并」


「merge」 命令

mergeappend 都是stata自带的数据处理命令,为了了解命令的使用,我们可以使用help 命令

help merge

通过帮助命令我们可以观察到如下语句格式

通过关键变量进行1对1合并
merge  1:1  varlist  using  filename

通过关键变量进行多对1合并
merge m:1 varlist using filename

通过关键变量进行1对多合并
merge 1:m varlist using filename

通过关键变量进行多对多合并
merge m:m varlist using filename

通过观测数进行1对1合并
merge 1:1 _n using filename

利用帮助文件的示例演示1对1的数据合并如何操作

webuse autosizelistwebuse autoexpenselist/*Perform 1:1 match merge*/webuse autosizemerge 1:1 make using http://www.stata-press.com/data/r15/autoexpenselist

通过list命令,我们可以观察到 autosize 和 autoexpense 的数据详情

autosize 数据

make weight length
Toyota   Celica 2,410 174
BMW 320i 2,650 177
Cad. Seville 4,290 204
Pont Grand Prix 3,210 201
Datsun 210 2,020 165
Plym. Arrow 3,260 170

autoexpense 数据

make price mpg
Toyota Celica 5,899 18
BMW 320i 9,735 25
Cad. Seville 15,906 21
Pont. Grand Prix 5,222 19
Datsun 210 4,589 35

根据数据中的make变量,进行 1对1 的合并,在merge合并中我们需要定义 master 数据集和 using 数据集,相当于我们对于数据集定义主从关系,我们将 autosize 数据集作为master,然后 using autoexpense 数据集1对1合并,那么可以得到如下合并结果:


使用 merge 后,stata会给出数据 match 的结果,如下表:这个结果告诉我们,两个数据集中有5个观测变量成功 match(用_merge==3表示这类变量),有1个观测变量 not matched,而且这个匹配失败的变量来自master 数据集 (用_merge==1表示这类变量)。

「数据match结果」

Result # of obs.
not matched 1
from master 1  (_merge==1)
from using 0  (_merge==2)
matched 5  (_merge==3)

在数据处理过程中可以在匹配后删除我们不需要的not matched 的样本,例如:drop if merge==1可以直接删除master数据集中未匹配的样本。


此外,merge 命令还提供了诸多的选择项(option)内容,比较常用的有:

  1. keepusing(varlist):保留数据集中特定变量
  2. generate(newvar):使用新的变量名称标记merge结果,默认为merge
  3. nogenerate :不生成merge变量
  4. update: 用using数据集中的值替代master数据集中相同变量的缺失值
  5. replace:用using数据集中的值替代master数据集中相同变量的非缺失值
  6. force:允许字符型和数值型变量之间不匹配

示例中还提供了1:m,m:1,以及多个选择项使用的例子(我们一般很少用到m:m合并),其操作与解读与1:1的合并类似

   /*进行 1:1  merge, 并保留匹配变量*/webuse autosize, clearmerge 1:1 make using http://www.stata-press.com/data/r15/autoexpense, ///keep(match) nogenlist/* Setup */webuse dollars, clearlistwebuse sforcelist/*与 sforce 进行 m:1  merge */merge m:1 region using http://www.stata-press.com/data/r15/dollarslist/*Setup*/webuse overlap1, clearlist, sepby(id)webuse overlap2list/*进行 1:m  merge, 带update replace选项*/webuse overlap2, clearmerge 1:m id using http://www.stata-press.com/data/r15/overlap1 ///    update replacelist  /*按样本进行顺序合并*/webuse sforce, clearlistmerge 1:1 _n using http://www.stata-press.com/data/r15/dollarslist


「append」 命令

如果需要实现数据的纵向合并,我们使用append命令

help append

append的语句格式如下

append using filename [filename ...] [, options]

使用示例数据演示合并

/*Setup*/webuse evenlistwebuse oddlistappend using http://www.stata-press.com/data/r15/evenlist

even数据集

number even
6 12
7 14
8 16

odd 数据集

number odd
1 1
2 3
3 5
4 7
5 9

合并结果

number odd even
1 1 .
2 3 .
3 5 .
4 7 .
5 9 .
6 . 12
7 . 14
8 . 16

append命令也带有 keep nolabel force等选择项,使用方法与merge大同小异


这些操作可以帮助我们在stata中实现数据的横向与纵向合并。例如在CFPS数据集中,可以根据追踪调查所标记的个人ID(pid)和家庭ID(fid)等变量从相应数据库中提取我们所需的变量进行合并;也可以根据调查年份合并我们所需的面板...

在实际中可以根据数据的结构特点和研究需求选择合适的操作命令,用stata进行数据集的合并你学会了吗?

本文相关的附件可以从https://github.com/czxa/Stata-Chinese-community获取,点击阅读原文即可跳转~

欢迎关注公众号获取更多stata相关推文

append 后如何删除_如何在STATA中合并数据文件呢?相关推荐

  1. git 还原文件到其他版本_如何在Git中还原旧文件版本

    git 还原文件到其他版本 读: 第1部分:什么是Git? 第2部分:Git入门 第3部分:创建第一个Git存储库 第4部分:如何在Git中还原旧文件版本 第5部分:3个用于Git的图形工具 第6部分 ...

  2. csv文件示例_如何在R中使用数据框和CSV文件-带有示例的详细介绍

    csv文件示例 Welcome! If you want to start diving into data science and statistics, then data frames, CSV ...

  3. matlab分析xml文件_如何在Java中读取XML文件(DOM分析器)

    matlab分析xml文件 Today we will learn how to read the XML file in Java. We will also learn how to parse ...

  4. java 合并两个列表_如何在Java中合并两个列表?

    java 合并两个列表 Merging two lists in Java is often a useful operation. These lists can be ArrayLists or ...

  5. macos 虚拟镜像文件_如何在macOS中使用虚拟文件测试网络或硬盘速度

    macos 虚拟镜像文件 File transfer speeds can vary greatly from device to device. The same holds true for ne ...

  6. linux中文件重命名_如何在Linux中重命名文件?

    linux中文件重命名 This tutorial will walk you through the simple steps to rename a file in Linux. 本教程将引导您完 ...

  7. arm中的.a文件如何产生的_如何在IPFS中Pin一个文件?

    对IPFS中,有这样一个误解----认为存储在其中的文件是永久保存的.实际上并不是这样,存储在IPFS中的文件只在某种特殊状态下才会被一直保存,这个特殊状态就是"Pin". &qu ...

  8. python读json文件数组_如何在python中从json文件读取json对象数组

    我有一个名为example.json的json文件,包含以下内容[{ "product/productId" : "XXX", "product/ti ...

  9. 格兰杰检验的基本步骤_如何在STATA中做格兰杰因果关系检验

    格兰杰因果检验相关的stata命令可以有三种. 方法一: reg y L.y L.x (滞后1 期) estat ic (显示AIC 与BIC 取值,以便选择最佳滞后期) reg y L.y L.x ...

最新文章

  1. 半小时训练亿级规模知识图谱,亚马逊这个 AI 框架要火
  2. [转]如何讓IE7中關閉瀏覽器不出現詢問
  3. mXSS攻击的成因及常见种类
  4. 开发人员学Linux(1):VirtualBox中安装CentOS7过程记录
  5. 页面怎么把关键字保留下来_怎么做seo优化,以及网站SEO优化计划!
  6. Zuul默认路由规则
  7. 12306春节高速抢票
  8. 为什么html运行之后不滚动,为什么很多移动端的HTML UI,在滚动时都用transform属性而不是用传统的滚动条?...
  9. window.parent与window.opener的区别与使用
  10. 协程是什么?怎么来的?它有什么作用?
  11. freetextbox的问题两个
  12. 邮件安全上市公司 Mimecast 的部分源代码被 SolarWinds 黑客盗走
  13. Linux使用SSH上传下载文件,linux下用ssh上传,下载文件
  14. oracle简单建库基本流程
  15. Kendo UI开发教程(25): 单页面应用(三) View
  16. OFFICE拼写语法检查:全部忽略、全部更正的功能
  17. java汇编指令_汇编指令test的用法
  18. 软件工程学习笔记—————传统模型、面向对象模型的比较
  19. 解决kali linux 和 win10 双系统时间不一致问题
  20. 手机微信html整人代码大全,2018年微信整人代码有哪些?2018年微信整人代码大全!...

热门文章

  1. mysql使用的索引长度_MySQL索引的索引长度问题
  2. linux 当前用户执行定时任务
  3. (Docker实战) 第三篇:配置_开发环境
  4. 第5篇:Flowable-Modeler详述之开发环境搭建
  5. axis2手动设置命名空间targetNamespace
  6. java下载json需要的包_jenkins 获取插件,下载插件提速,配置国内镜像
  7. JAVA实现onvif的ptz控制_使用Onvif协议进行设备PTZ云台控制
  8. React之类式组件
  9. dtft变换的性质_[2018年最新整理]DTFT变换.ppt
  10. python中argument函数_PythonStudy——函数的参数 Function argument