查看原文
其他

合并,“纵”享新丝滑:frameappend & xframeappend

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:温和铭,中南财经政法大学统计与数学学院

本文编辑:王玉洁

技术总编:戴   雯

Stata&Python云端课程来啦!

为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~原价2400元的Python编程培训课程,现在仅需100元,详情请查看推文《Python云端课程福利大放送!0基础也能学~》。关于Stata,爬虫俱乐部推出了系列课程,内容包括字符串函数、正则表达式、爬虫专题和文本分析,可以随心搭配,价格美丽,物超所值,更多信息可查看Stata系列推文《与春天有个约会,爬虫俱乐部重磅推出正则表达式网络课程!》《与春天有个约会,爬虫俱乐部重磅推出基本字符串函数网络课程》等。变的是价格,不变的是课程质量和答疑服务。对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦。


导读

在数据集合并中,我们经常使用到的有两种类型,分别是纵向合并append和横向合并merge。在之前的推文中,我们详细介绍了Stata16推出的frame框架的含义和使用方法,还展示了如何使用frlink命令实现框架间的横向合并。

往期推文回顾(戳蓝字可以重温)

接下来,就让我们看看如何通过斯坦福大学的 Jeremy Freese 开发的frameappend命令和帝国理工大学的 Roger Newson 开发的升级版命令xframeappend,实现框架数据的纵向合并,让数据整理更“丝滑”~

1.语法介绍
由于frameappendxframeappend是由用户自主开发的,并不是Stata的原装产品,所以在愉快地使用这两个命令前,我们需要先在Stata中进行模块的安装:
ssc install frameappend ssc install xframeappend
然后就可以输入:
help frameappendhelp xframeappend
开始学习它们的语法啦~

1.1 frameappend命令

append翻译过来就是附加、增补,在Stata中,当数据集需要追加样本,即增添行数据时,append就派上了用场,frameappend的用法也大同小异,只不过是将连接的数据集换成了框架,具体语法如下:

/*将名为framename的框架中的内容追加到当前框架的末尾*/frameappend framename [, drop]
注意:若文件名中含有空格或其他特殊字符,要用双引号“ ”把文件名括起来
option
drop删除已合并进去的框架

1.2xframeappend命令

frameappend 还不足以满足用户的需要时,xframeappend就应运而生了,作为前者的plus版本,xframeappend的作用对象不再是单个的数据框架,而是一整串的框架列表,同时还提供了更多的可选项,语法如下:

/*将名为framelist的框架列表中的一个或多个框架的内容附加到当前框架的末尾*/xframeappend framelist [ , drop generate(newvarname) fast ]
注意:①从框架列表中被选择添加进去的框架中,若含有当前框架所没有的变量。则变量会按照在框架列表中出现的顺序进行排序;②该命令同时适用于名称以下划线开头的变量
options
drop从框架列表中删除已合并进去的框架。
generate(newvarname)变量名newvarname用于标记数据个案来源,若该变量为0,表示数据来源于当前框架;若该变量为k = 1,2,…,则表示数据个案来源于框架列表中的第k个框架,依次类推。
fast指定当程序执行失败或用户按下Break时,将不做任何额外的工作来恢复当前框架中的原始数据集。
2.案例实操

2.1frameappend进行单个框架连接

由于开发者并没有给出可供参考的案例,故我们从国泰安数据库分别收集了2020年创业板和科创板的偿债能力信息,进行框架数据合并,首先将下载的Excel表格导入Stata数据集,命令如下:

clear allimport excel "D:\2020创业板偿债能力信息.xlsx", firstrow //导入创业板数据  frame dir //显示内存中已有的框架信息

此时第一个表格已经成功导入,可以看到,该数据集共有7个变量,337条观测值。

使用frame dir,发现目前内存中的框架只有default主框架一个,且星号标志说明其内部数据未保存,故输入命令保存数据集:
frame default: save 2020_1.dta, replace //保存当前数据,并命名为2020_1frame dir //检查是否保存

检查结果显示,星号消失,“2020创业板偿债能力信息.xlsx”已经变成了“2020_1.dta”保存在default框架中。
接下来是第二个数据集的导入,在前面的推文中,我们介绍了frame的优点之一就是弥补了以往Stata每次只能导入一个数据集的遗憾,这里新建一个框架,类似地将科创板信息导入进去:
frame create new //新建一个名为new的框架frame change new //切换到new框架import excel "D:\2020科创板偿债能力信息.xlsx", firstrow //导入科创板信息


第二个表格也成功导入,共有7个变量,117条观测值。接下来重复上面的操作,保存数据集:
frame new: save 2020_2.dta, replace //保存当前数据,并命名为2020_2frame dir  //查看框架信息

可以看到,“2020科创板偿债能力信息.xlsx”也已经变成了“2020_2.dta”保存在new框架中,自此,我们实现了分别将两个表格存入两个不同的数据框中,2020_1.dta保存在default即原框架,2020_2.dta保存在new框架,相当于一个Excel表格中的两个sheet。

随后,到了我们的重头戏,使用frameappend将上述两个框架拼接起来,这里选择的是将new框架添加进default框架也就是默认的主框架中:

frame change default //切换到default框架frame //确定当前的框架

注意:建议每次在框架中处理数据之前,都输入frame检查当前在哪个框架,避免出错!

frameappend new //将框架new中的数据合并到当前框架末尾

截取结果中合并部位(序号337、338)附近的样本信息,观察第一列的变量,可以发现,两个框架已经完美地纵向合并在了一起,并保存在default框架中。如果不再需要new框架,也可以在合并时添加drop选项,就可以把new框架删去(数据难获得,删除需谨慎哦)
frameappend new, drop //将框架new中的数据合并到当前框架末尾,并删除new框架frame dir

通过报告所有框架信息可知,目前只剩下了default一个框架,且数据集已被合并,任务圆满完成~

2.2xframeappend进行多个框架连接

在前面的展示中,我们将"2020年创业板偿债能力信息.xlsx"导入了数据框,并与另一个框架中的数据集进行了合并,但是在实际的数据处理中,往往不仅是两个数据集合并这么简单,还会涉及到多个框架之间的合并。假如我们获取了2017~2019年三年的创业板偿债能力信息表格,该如何与2020年的数据合并呢?接着往下看吧!

第一步还是导入数据(表格仍取自国泰安数据库):

clear all //清除所有框架信息frame //确认当前的框架为defaultimport excel "D:\2020创业板偿债能力信息.xlsx", firstrow //导入创业板信息keep in 1/5 //保留前五个观测值frame default: save 2020.dta, replace //保存当前数据,并命名为2020frame dir  //显示内存中已有的框架信息 

为使合并效果更直观,这里使用了keep in只保留表格中前五个观测值,接下来新建框架fr1、fr2、fr3,将2017~2019年的表格分别导入三个框架中,过程与上述操作类似,话不多说,直接上代码:
/*导入2019年数据*/frame create fr1 //新建一个名为fr1的框架frame change fr1 //切换到fr1import excel "D:\2019创业板偿债能力信息.xlsx", firstrow //导入2019创业板信息keep in 1/5 //保留前五个观测值frame fr1: save 2019.dta, replace //保存当前数据,并命名为2019frame dir //查看框架信息/*导入2018年数据*/frame create fr2 //新建一个名为fr2的框架frame change fr2 //切换到fr2import excel "D:\2018创业板偿债能力信息.xlsx", firstrow //导入2018创业板信息keep in 1/5 //保留前五个观测值frame fr2: save 2018.dta, replace //保存当前数据,并命名为2018frame dir  //查看框架信息/*导入2017年数据*/frame create fr3 //新建一个名为fr3的框架frame change fr3 //切换到fr3import excel "D:\2017创业板偿债能力信息.xlsx", firstrow //导入2017创业板信息keep in 1/5 //保留前五个观测值frame fr3: save 2017.dta, replace //保存当前数据,并命名为2017frame dir  //查看框架信息
注意:每次在框架中使用 frame 框架名:save保存数据集时,要注意框架名是否正确,否则会不慎覆盖其他框架的数据集!

最后的输出结果显示,四年的表格数据已经导入到对应的框架中且顺利保存,接下来又到了激动人心的时刻:
frame change default //切换到default框架xframeappend fr1 fr2 fr3, gen(num) //将框架列表fr1,fr2,fr3合并进default,生成新变量num记录个案来源frame dir //查看框架信息


可以看到,default框架中新合并进了其他三个框架中的数据集,且在最后一列新生成了num变量,用来标记个案来源,其中num=0对应的个案来自合并前的default框架,num=1则表示改个案来自fr1,num=2表示来自fr2,以此类推……在本案例中,仅仅使用了一个简单xframeappend语句,就把四个框架纵向合并到了一起,推广到大型的面板数据处理,可谓是提高效率的好帮手。怎么样,如此“丝滑”的数据合并有没有让你心动呢?
以上内容就是关于frameappendxframeappend命令简单的使用介绍,掌握frame框架下的一些小命令,或许就能对数据处理起到大作用,以后我们还将陆续介绍其它有关frame的命令,敬请期待吧~


最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。




关注我们,订阅更多最新消息

 对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!





往期推文推      什么是全局配置项?|从零开始的Pyecharts(二)      帮你拿下数据可视化|从零开始的Pyecharts 

        Stata助力疫情打卡管理——是谁没有接龙呢?

        这十年,《金融研究》的编委和读者偏爱哪些研究话题和文章?

       【案例展示】Python与数据库交互

学好这一手,英语词典常在手 

玩转Stata中的数学函数

用spmap看中国空气质量

戳穿围城面具:安利&劝退一个专业

走进图文并茂的攻略世界 

玩转word文档“大变身”——wordconvert

数据读入|一文读懂用Stata读入不同类型的数据

简述递归

OpenCV库——轻松更换证件照背景色

800万年薪!还有谁?!

千古伤心词人,词伤几何?

去哪儿网攻略爬取——跟我一起去大理吧

"有你才有团"——Stata爬取王者荣耀英雄海报

爬虫实战|嚣张的徽州宴老板娘错在哪?

如何获取衡量股民情绪的指标?|东方财富股吧标题爬虫

利用Python构建马科维茨有效边界

rangestat,让统计量灵活滚动起来!

听说这样做立项成功率更高哦

如何处理缺失值?这一篇搞定!

善用dataex命令,高效沟通你我他

用Markdown制作简历,强力助力你的求职季

大数据下的大学分数线排行榜,快来围观!

《觉醒年代》—带你回到百年前

用Stata画的三维图很奇怪怎么办?

如何随机生成满足特定数据特征的新变量?

爬取无法翻页网页——自然科学基金项目及可视化

爬取京东评论数据进行情感分类

关于我们 


微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里

作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众
中提出,只需支付少量赏金,我们会在后期的推文里给予解答。



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存