Stata软件joinby命令 您所在的位置:网站首页 stata数据集横向合并 Stata软件joinby命令

Stata软件joinby命令

2024-01-22 15:02| 来源: 网络整理| 查看: 265

0 分享至

用微信扫码二维码

分享至好友和朋友圈

本文作者:王玉洁,中南财经政法大学金融学院 本文编辑:温和铭 技术总编:李婷婷

导读

Hello,大家好呀!小编今天给大家带来Stata中一个好用的命令——joinby。当我们进行数据的横向合并时,经常会用到merge命令,但是在使用merge命令进行一对一合并、一对多合并、多对一合并和多对多合并都不是我们想要的结果时,可以考虑使用joinby组内交叉合并。老规矩,还是先上命令语法和选项介绍。

一、命令介绍

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数据集。

二、案例应用

看完命令介绍,下面我们就小试牛刀,使用案例来看看joinby的具体用法吧!

首先,我们使用input命令生成两个具有公共变量id的数据集,然后使用joinby进行组内交叉合并,具体程序如下:

clear allinput id str3 v11 "a"1 "b"2 "c"2 "d"endsave 1.dta, replaceclearinput id str3 v21 "f"1 "g"2 "h"2 "i"2 "j"endsave 2.dta, replacejoinby id using 1.dta //使用id变量进行合并list

合并结果如下:

我们可以看到,使用input命令生成的两个数据集内有分组,在使用joinby命令时,按分组对数据进行交叉合并。

接下来,我们再来用一个小例子来看看joinby命令的update选项的具体用法。首先还是使用input命令生成两个具有公共变量name的数据集,然后再通过joinby进行组内交叉合并,同时比较使用和不使用update选项的区别,具体程序如下:

clear allinput str8 name English"Jane" 88"Bob" ."Betty" 90"Jack" 98endlistsave eng1.dta, replaceclearinput str8 name English"Jane" ."Bob" 95"Betty" 90"Jack" 98endlistsave 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)

运行结果如下:

从运行结果可以看到,当master数据集中的数据与using数据集中的数据冲突时,指定unmatched(master)选项可以只保留master数据集中不匹配的观测值。

最后,我们使用删除上市公司在停复牌期间的事件作为一个综合案例进行说明。下面两张图中的数据分别表示事件列表和停复牌日期。

同一公司可能有多个事件,也可能发生多次停牌,只要某个事件,在任一停复牌期间内,就删除该事件。因此,对同一公司的每一个事件都与该公司所有的停复牌日期进行组内交叉合并,找到在停复牌时期内发生的事件,然后再将这些事件与事件列表进行横向合并,最后只保留非停复牌日期内的事件。具体程序如下:

use 事件列表,clearjoinby stkcd using 停复牌gen date1 = date(date,"YMD")gen num = 1 if date1 >= startdate & date1 /阅读下一篇/ 返回网易首页 下载网易新闻客户端


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有