软件应用 | 神奇的组内交叉合并
本文转载自公众号Stata and Python数据分析
导读
Hello,大家好呀!小编今天给大家带来Stata中一个好用的命令——joinby。当我们进行数据的横向合并时,经常会用到merge命令,但是在使用merge命令进行一对一合并、一对多合并、多对一合并和多对多合并都不是我们想要的结果时,可以考虑使用joinby组内交叉合并。老规矩,还是先上命令语法和选项介绍。
Part1命令介绍
1命令语法
joinby [varlist] using filename [, options]
2选项介绍
update
:当master数据集中存在缺失值时,指定此选项可以使得using数据集中的非缺失值对其进行更新覆盖。replace
:这个选项只能与update一起使用。当指定此选项时,master数据集中的非缺失值将被using数据集的相应值替换。但是一个非缺失的观测值不会被一个缺失的观测值替换。unmatched()
:当观测值不匹配时,指定此选项可以保留一个数据集的观测值。unmatched(none)表示忽略所有不匹配的观测值;unmatched(both)表示同时保留master和using数据集的不匹配的观测值;unmatched(master)表示仅保留master数据集中不匹配的观测值;unmatched(using)表示仅保留using数据集中不匹配的观测值。_merge(varname)
:使用此选项可以标记合并结果中观测值的来源,默认为_merge。nolabel
:这个选项可以防止Stata直接从using数据集复制值标签到master数据集。
Part2案例应用
看完命令介绍,下面我们就小试牛刀,使用案例来看看joinby
的具体用法吧!
首先,我们使用input
命令生成两个具有公共变量id的数据集,然后使用joinby
进行组内交叉合并,具体程序如下:
clear all
input id str3 v1
1 "a"
1 "b"
2 "c"
2 "d"
end
save 1.dta, replace
clear
input id str3 v2
1 "f"
1 "g"
2 "h"
2 "i"
2 "j"
end
save 2.dta, replace
joinby id using 1.dta //使用id变量进行合并
list
合并结果如下:input
命令生成的两个数据集内有分组,在使用joinby
命令时,按分组对数据进行交叉合并。
接下来,我们再来用一个小例子来看看joinby
命令的update
选项的具体用法。首先还是使用input
命令生成两个具有公共变量name的数据集,然后再通过joinby
进行组内交叉合并,同时比较使用和不使用update
选项的区别,具体程序如下:
clear all
input str8 name English
"Jane" 88
"Bob" .
"Betty" 90
"Jack" 98
end
list
save eng1.dta, replace
clear
input str8 name English
"Jane" .
"Bob" 95
"Betty" 90
"Jack" 98
end
list
save eng2.dta, replace
以name为合并依据进行组内交叉合并,不使用update选项:
joinby name using eng1.dta
使用update
选项时,using数据集中的非缺失值将对master数据集中的缺失值进行覆盖更新。
joinby name using eng1.dta, update
从运行结果来看,当不加update
选项时,只保留匹配成功的数据,并且在默认情况下保留master数据集的值;当加上update
选项时,master数据集中的缺失值会被using数据集中的非缺失值覆盖更新。unmatched()
和_merge(varname)
选项的用法。具体命令如下:
joinby name using eng1.dta, unmatched(master) _merge(_merge)
运行结果如下:unmatched(master)
选项可以只保留master数据集中不匹配的观测值。
最后,我们使用删除上市公司在停复牌期间的事件作为一个综合案例进行说明。下面两张图中的数据分别表示事件列表和停复牌日期。
use 事件列表,clear
joinby stkcd using 停复牌
gen date1 = date(date,"YMD")
gen num = 1 if date1 >= startdate & date1 <= enddate
keep if num == 1
merge 1:1 stkcd date using 事件列表
keep if _m == 2
keep stkcd date
运行结果如下:
点击搜索你感兴趣的内容吧
往期推荐
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
推荐 | 青酱
欢迎扫描👇二维码添加关注