本站已开通微信支付宝购币,请在个人中心-我的资产-微信或支付宝在线充值!

stata多对多数据合并教程

我们在数据处理时,经常需要对文件进行横向合并,我们知道merge 1:1 varlist using filename [, options]可以进行一对一合并;merge 1:m varlist using filename [, options]可以进行一对多合并;merge m:1 varlist using filename [, options]可以进行多对一合并,然而在使用merge m:m varlist using filename [, options]进行多对多合并是有问题的,那么问题在哪?如何解决?这篇推文将会给大家解释清楚。

1.生成两个dta文件:

clear

input id str3 v1

1 “a”

1 “b”

1 “c”

1 “d”

1 “e”

save 1.dta, replace

clear

input id str3 v2

1 “d”

1 “e”

1 “f”

save 2.dta, replace

接着,我们将两个文件进行横向合并,可以看到,由于两个文件中id不是唯一识别的,属于多对多合并

2.直接用merge m:m横向合并数据

use 1.dta, clear

merge m:m id using 2.dta

drop _m

可以看到,直接使用merge m:m进行多对多合并时,第一,并不是1.dta的观测值分别对应2.dta的每一条观测值;第二,当某个文件的观测值少时,将会以该文件中的最后一条观测值对另一个文件中的观测值进行合并,如上图第4、5行。那么怎么得到我们想要的结果呢?

3.先扩展,再合并

整体思路是,把多对多合并变为一对多或多对一合并。首先,我们在1.dta中生成变量n,等于所在行行号,然后求出n的最大值,放在局部宏中,并保存为3.dta文件,程序如下:

use 1.dta, clear

bysort id: gen n = _n

sum n

local max = r(max)

save 3.dta, replace

这样,把id和n两个变量作为合并依据就变成唯一的了,可以看到,n最大值为5。接着在2.dta中,对数据进行扩充相应的倍数,即1.dta中变量n的最大值:

use 2.dta,clear

expand `max’

bysort id v2 : gen n = _n

sort n v2

扩充后的数据,id和n作为合并依据的话,每个都为3个,所以可以与3.dta进行多对一合并,程序和结果如下:

merge m:1 id n using 3.dta

order id v1

sort id v1 v2

drop n _m

我们在做事件研究时,如果某个事件发生在上市公司停牌期间,我们往往需要把其剔除掉,那么首先,我们需要按照股票代码把事件列表和停复牌时间进行横向合并,由于同一个公司可能对应多个时间,也可能多次停牌,因此应该进行多对多合并,为了方便大家操作,我们手动生成一个事件列表:

clear

set more off

input Stkcd str15 date

000001 “2006-03-01”

000001 “2007-06-05”

000001 “2007-05-05”

000001 “2010-03-01”

000001 “2013-05-06”

000002 “2003-07-25”

000002 “2009-08-16”

000002 “2010-05-09”

save 事件列表,replace

我们截取Stkcd为000001和000002公司的停复牌日期

其中,startdate为停牌日期,enddate为复牌日期,合并之后,如果date,即时间发生日在停复牌时间之间,就剔除掉。

接下来,横向合并两个文件,程序如下:

use 事件列表, clear

bysort Stkcd : gen n = _n

sum n

local max = r(max)

save 事件列表1,replace

use停复牌,clear

expand `max’

bysort Stkcd startdate enddate : gen n = _n

merge m:1 Stkcd n using 事件列表1

keep if _m == 3

drop _m n

这样,每一个事件都对应所有的停复牌日期,接着将发生在停复牌的事件删除即可,程序如下:

gen date1 = date(date,”YMD”)

gen num = 1 if date1 >= startdate & date1 <= enddate

keep Stkcd date num

duplicates drop

sort Stkcd date num

bysort Stkcd date :carryforward num,replace

drop if num == 1

drop num

赞( 1 ) 打赏
未经允许不得转载:版权归于易获数据www.yihuodata.com 易获提醒:标题中未带‘原创’二字的数据均为用户发布,本站不享有任何收益与权益。 易获数据网 » stata多对多数据合并教程
本站已开通微信支付宝购币,请在个人中心-我的资产-微信或支付宝在线充值!【请先在首页顶部申请账号,如遇到没收到密码可联系客服重置密码】
AD10: 本站已开通微信支付宝购币,请在个人中心-我的资产-微信或支付宝在线充值!

评论 抢沙发

评论前必须登录!

沪深上市公司16种高污染重污染企业名单及环境信息披露EDI指数数据2015-2018年 (9) 收入熵指数 (7) 产品市场集中度和竞争力 Stata计算赫芬达尔 赫希曼HHI指数和勒纳指数 2000-2018年 (6) 沪深A股企业高管超额薪酬与绝对薪酬数据加Stata计算代码2007-2019年 (6) 沪深A股公司多元化变量行业数目 (6) 【原创】沪深上市公司是否披露CSR社会责任报告 (5) 环境报告 (5) 上市公司盈余激进度 (5) 上市公司审计报告激进性 审计质量数据stata代码结果2000-2020年 (5) 上市公司并购绩效CAR (5) 沪深股票公司有效价差和相对有效价差数据和stata代码2003-2019年 (4) A股企业归类变更盈余管理预期核心收益模型数据与Stata代码2000-2019年 (4) A股上市公司内部薪酬差距 管理层平均薪酬和员工平均薪酬数据送stata代码2000-2019年 (4) 沪深上市公司高管超额在职消费 高管非货币性私有收益数据和stata代码2006-2019 (4) 沪深a股机构投资者羊群行为LSV模型实证数据及stata代码2011-2019 (4) 沪深上市公司内部薪酬差距与公司价值 基于生命周期理论的新探索2008-2019 (4) 沪深上市公司ceo过度自信总经理过度自信数据stata代码2008-2019 (4) DD (4) 监督还是掏空之大股东持股比列与股价崩盘风险研究数据与stata分析实证代码2008-2020年 (4) 上市公司会计信息可比性截面可比数据stata代码和结果2000-2020年 (4) 上市公司企业专利质量知识宽度计算stata代码及源数据申请专利质量引用信息1992-2020 (4) 修正的琼斯模型 应计盈余管理stata代码和数据计算结果2000-2021年增加科创板公司 (4) 上市公司长期机构投资者与短期机构投资者持股数据stata代码2001-2021年 (4) 上市公司公司治理水平主成分析法stata代码计算与数据结果2003-2021年 (4) 上市公司第一类代理成本和第二类代理成本计算stata代码和数据1991-2021年 (4) A股上市企业劳动投资效率数据Net_Hire模型Stata代码和计算结果2000-2021 (4) 上市企业投资效率的Chen模型与Biddle模型数据带stata计算过程代码1998-2021年最优版 (4) [合作数据]沪深上市公司社会责任绿色环境环保支出总额2010-2018年 (3) [原创]沪深上市公司IT资本支出 IT硬件投资 IT软件投资数据2007-2018年 (3) 不良贷款率 (3)

网站统计

  • 页面总数: 8
  • 分类总数: 7
  • 链接总数: 0
  • 最后更新: 2025-07-30

易获数据 论文数据获取 更专业 更方便

联系我们 今日数据