D2. 资料的合并与追加
作者:崔丽娟 (浙江大学)
邮箱 :lijuanlj_cui@163.com
一般而言,我们在实证分析过程中用到的数据会有多个来源,只有把他们都合并起来才可以做最终的分析。本节我们介绍资料的合并与追加,主要包括横向合并与纵向合并。
global path "D:\LY_stata" // 将 【LY_stata】文件夹放置于 D 盘根目下
cd "$path\_data" //所有范例数据存于此处1. 横向合并:增加变量
- 横向合并的基本原理
第一种情形:横向合并,即增加变量。如下图所示,假设我们的数据有两个来源: A 和 B,A 里可能包含 10 个变量,B 里包含另外 10 个变量,横向合并的基本要求就是将A和B这两份资料放到一起。关键之处是 A 和 B 中每一行的数据要一一对应,例如时间序列数据合并之后的同一交易日的数据要一一对应;如果是面板数据资料,则同一家公司在同一会计年度的数据要一一对应。

在 Sata 中我们可以使用 merge命令进行合并。
help merge1.1 一对一合并 [1:1]
- 数据形态
在合并前先查看需要合并的两份数据:
use merge_m.dta, clear
browse第一份数据是 merge_m.dta,包含 2001 年 1 月 2 日- 2001 年 12 月 31 日共 248 个交易日的三个变量,这三个变量分别是 x1_close、x2_volume 和 x3_change,如下图所示:

use merge_u.dta, clear
browse第二份数据是 merge_n.dta,包含 2001 年 1 月 2 日- 2001 年 12 月 31 日共 248 个交易日的三个变量,这三个变量分别是 x4_open、x5_high、x6_low,如下图所示:

我们的目的是要将这两份数据的六个变量合并起来。
- 合并方法
use merge_m.dta, clear // master dataset 调入需要合并的数据
merge 1:1 date using merge_u // using dataset
br请注意 merge 命令的语法,两份待合并的数据中都包含同一个变量 date 交易日,以保证两份数据合并之后同一交易日的数据一一对应; using 之后是用来合并的第二份数据 merge_u.dta;1:1 表示两份数据的维度是相同的,接下来我们会看到一维对多维或多维对一维的数据的合并。
- 结果如下:
. use merge_m.dta, clear // master dataset
(S&P 500)
. merge 1:1 date using merge_u // using dataset
Result # of obs.
-----------------------------------------
not matched 0
matched 248 (_merge==3)
-----------------------------------------
. br
合并结果显示,六个变量一一对应,并生成了一个新变量_merge,_merge取值为 1 表示该行数据仅来自第一份数据,_merge取值为 2 表示该行数据仅来自第二份数据,_merge取值为 3 表示该行数据同时来自两份合并数据。
1.2 多对一合并 [m:1]
- 数据形态
use GTA_FS.dta,clear //上市公司财务资料,id-year, Panel
br
use GTA_basic.dta,clear //上市公司基本资料,只有 id 没有 year
br第一份数据是来自上市公司的财务资料,是一份面板数据(截面变量为 id ,时间变量为 year );第二份数据是上市公司的基本资料,只有 id 没有 year。
- 合并方法
use GTA_FS.dta, clear
merge m:1 id using GTA_basic.dta
br注意此处 merge 命令的写法:两份数据的共有变量是 id ,m:1 表示第一份资料的维度比第二份资料的维度高,即多维对一维的数据合并。
merge变量的含义:- _merge==1 obs. from master dataset
- _merge==2 obs. from only using dataset
- _merge==3 obs. from at least both datasets
1.3 一对多合并 [1:m]
- 合并方法
*-Note: m:1 的逆向操作
use GTA_basic.dta, clear
merge 1:m id using GTA_FS.dta, nogen
browse
order id year
xtset id year注意此处 merge 命令的写法:两份数据的共有变量是 id ,m:1 表示第一份资料的维度比第二份资料的维度低,即一维对多维的数据合并。 nogen 选项表示合并后不生成新变量_merge。
2 纵向合并:追加样本
- 纵向合并的基本原理
资料合并的第二种情形是纵向合并,即追加样本。例如,我们在某个数据库中获得了 2001 - 2010 年的数据资料,进一步又从另一个数据库获得了 2011 - 2013 年的资料并想将其追加到第一份资料的底部,即实现纵向合并。 基本原理如下图直观显示:A 是旧资料,需将新资料 B 追加到 A 的底部。追加的基本原则是 A 中的变量要与 B 中的变量一一对应,Stata 内部会自动查找 A 和 B 数据中同名的变量并匹配。

在 Sata 中我们可以使用 append命令进行合并。
help append- 两个数据库中的”同名变量”会自动对应累叠
*-数据形态
use append_m.dta, clear
br
use append_u.dta, clear
br
*-纵向追加方法
use append_m.dta, clear
append using append_u.dta
br- 几个注意事项:
- 两个数据库中的变量名称要相同,大小写也要完全相同。PRICE 和 price 是不同的变量。
- 两个数据库中的同名变量要具有相同的存储类型。同为文字变量或同为数值变量。
Also See
help mergeall
help mergemany
help nearmrg
help factmerg
help cross
help jionby
help addinby扩展阅读
- Stata数据处理:reshape - 纵横变换-长宽转换 view browse “https://www.lianxh.cn/news/c48db52c26ba5.html”
- 连享会:数据处理专题 view browse “https://www.lianxh.cn/blogs/25”