Stata 数据标签和合并

发布时间:2021-10-17 阅读 908

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者:左祥太 (武汉纺织大学)
邮箱Shutter_Z@outlook.com


目录


1. 批量设定标签

在处理 Stata 数据的时候,数据标签的处理一直是让很多人感到头疼的存在。本推文将提供一种更适合小白上手的方式,来快速实现标签的转换!具体原理与命令语法,请参考连享会推文 「Stata 数据处理:nrow + labone 的巧妙使用」

以 CSMAR 数据库中「国内外专利申请获得情况表」的部分数据为例,直接导入 Stata 之后数据表现为如下形式:

. lxhget pt_lcdomforapply.xlsx, replace
. import excel using pt_lcdomforapply.xlsx, clear firstrow

在导入数据之后,我们可以看到 Stata 的变量窗口如下:

不难发现,数据当中第一行即为各个变量的标签,第二行为标签的单位,这时我们便可以通过 labonenrow 的联用来把第一二行转换为对应变量的标签。

. *将原数据的一二行作为变量标签, 并用下划线连接
. labone, nrow(1 2) concat("_") 
. drop in 1/2                     
. *把一些原来被识别为文本类型的变量转换为数值型                     
. destring _all, replace  

经过上述转换之后,变量窗口与数据窗口分别会变成如下形式:

不难发现,labonenrow 联用之后就可以很方便的实现变量标签的填补。

2. 快速实现表格合并

在 Stata 当中,我们通常会用到两种主要的合并方式,一个是横向合并的 merge,一个是纵向合并的 append。前者主要用于增加更多的变量,后者主要用于追加更多的样本。

2.1 merge 的横向合并

merge 横向追加变量注意事项:

  • master 表与 using 表均为 dta 格式;
  • 合并变量名称要保持一致;
  • 合并变量类型要保持一致。

merge 的常见合并方式:

  • 1:1 的合并:1:1 的合并主要适用于两者之间都有一一对应关系的 dta 文件,即要合并与被合并的表内均存在一个变量可以使得每个条样本被唯一识别;
  • m:1 的合并:m:1 的合并主要用于合并公司的基础性息这类不会随时间而改变的表格,即要求主表当中识别变量可以对应多条样本,而被合并表当中是一一对应的关系;
  • 1:m 的合并:此类情况与 m:1 合并类似,不做赘述;
  • m:m 的合并:m:m 的合并很容易出现错误,不建议使用。

具体来看,在资产负债表的基础之上,我们追加合并企业利润表的数据。其中,master 表为资产负债表,using表为利润表,两者数据如下:

*资产负债表
clear
input long stkcd int year double(asset liability)
726 2009   6303066959.6 2115429187.87
726 2010  7015883263.33 2274286167.32
726 2011  7751885340.43 2281977783.93
726 2012  8153279084.33 2498587064.52
726 2013  8411948561.49 1997348584.08
726 2014  8627671393.88  1611240808.7
726 2015  9091170499.22 1814572869.22
726 2016  9407103263.34 1994029422.98
726 2017 10170624027.75 2395548537.95
726 2018 10537759811.84 2811935096.45
end
save balancesheet.dta, replace

*利润表
clear
input long stkcd int year double(revenue netprofit)
726 2009 4036219837.13  603736257.96
726 2010  5025624126.3  815053109.96
726 2011 6078659406.75  892071216.41
726 2012 5901049894.02  715850368.75
726 2013 6478245029.16 1039811812.78
726 2014 6169688792.53  979377181.57
726 2015 6173322778.61  735543028.77
726 2016 5981751344.63  853073450.12
726 2017 6409224044.97   883319109.6
726 2018 6879058813.93   858193572.1
end
save incstatement.dta, replace

不难发现,两者均存在可以唯一识别一条样本的变量,即 stkcdyear,所以我们将其作为唯一识别变量进行 1:1 的合并,合并命令如下:

. use balancesheet.dta, clear
. merge 1:1 stkcd year using incstatement.dta

    Result                      Number of obs
    -----------------------------------------
    Not matched                             0
    Matched                                10  (_merge==3)
    -----------------------------------------

接着,我们循环实现资产负债、利润与持股比例的合并。其中 drop if _merge != 3 表示我们删除每次合并当中没有匹配对象的数据,drop _merge 是为了删除每次合并当中的 _merge 变量,如果不删除就无法进行下一次的合并。具体命令如下:

use balancesheet.dta, clear
foreach v in incstatement shareholders{
   merge 1:1 stkcd year using `v'.dta
   drop if _merge != 3
   drop _merge
}

2.2 append 的纵向合并

需要注意的是,append 纵向追加样本时,需要保持两表变量名一致。具体来看,我们先将资产负债表中每一年的数据进行拆分,模拟需要合并的截面数据,然后再使用 append 命令进行追加样本。

. use balancesheet.dta, clear
. forvalues i = 2009/2018{
  2.     use balancesheet.dta, clear
  3.     keep if year == `i' 
  4.     save temp_`i'.dta, replace
  5. }

上述命令表示把资产负债表当中每一年的数据都拆分出来,并分别保存为以 temp_2009、temp_2010 ... temp_2018 命名的 dta 文件。下面演示通过循环的方式对样本进行纵向追加,其实也就是拆分的逆过程:

. use temp_2009.dta, clear
. forvalues i = 2010/2018{
  2.     append using temp_`i'.dta
  3. }

这样我们便可以得到追加完成样本后的数据,使用 save 命令进行保存即可。更多有关数据合并的知识,请参考连享会推文「Stata:数据合并与匹配-merge-reclink」

3. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 合并 标签 merge append labone, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,700+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxhsongbl 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh