查看原文
其他

跨框架合并数据|frlink的用法,你get到了吗

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

本文作者:李忠旺,河南大学经济学院

本文编辑:陈丹慧

技术总编:李婷婷

爬虫俱乐部云端课程

  爬虫俱乐部于2020年暑期在线上举办的Stata与Python编程技术训练营和Stata数据分析法律与制度专题训练营已经圆满结束啦~应广大学员需求,我们的课程现已在腾讯课堂全面上线,且继续提供答疑服务。现在关注公众号并在朋友圈转发推文《来腾讯课堂学Stata和Python啦》或《8月Stata数据分析法律与制度专场来啦!》,即可获得600元课程优惠券,集赞50个再领200元课程优惠券!(截图发至本公众号后台领取)原价2400元的课程,现在只要1600元!
01

导读

数据的合并在我们进行数据分析的过程中非常重要,在Stata中数据合并的命令有很多,例如纵向合并的append命令,以及横向合并中的 merge 和 mergemany 命令等等,这些命令都是数据合并的好帮手,根据不同的需要,大家可以选择最合适的命令来使用。如果我们想要合并的数据存在于两个甚至多个不同的数据集中,就可以使用今天给大家介绍的一种跨框架(frame)的合并命令——frlink。

02

frlink命令的简单介绍

frlink命令的完整语法如下:

frlink {1:1|m:1} varlist₁, frame(frame₂ [varlist₂]) [generate(linkvar₁)]其中,m:1表示多对一匹配,当前框架中的多个观察值与另一框架中的相同观察值匹配;1:1则可以视作m:1的特殊形式,表示当前框架中的一个观测值最多只能与另一框架中的一个观测值匹配。varlist₁:匹配变量,所有的连接都是基于匹配变量的相等性而形成的。当匹配变量的取值在两个框架中相等时,当前框架中的观测值与另一框架中的观测值进行匹配,从而形成连接。连接中可以指定多个匹配变量。frame(frame₂ [varlist₂]):指定被连接的框架名为frame₂,以及frame₂中的匹配变量名为varlist₂。如果没有指定varlist₂,则默认匹配变量在两框架中具有相同的名称varlist₁。frame()选项为必选项generate(linkvar₁):连接创建好后,将会向当前框架中添加一个连接变量linkvar₁,如果未指定此选项,连接变量将与被连接框架frame₂同名。03

实际操练

我们首先创建两个不同的框架classA 和 classB,并在框架下输入数据信息。

clear all frame rename default classA //将当前默认框架重命名为classA input student_id history english 1 40 80 2 50 90 3 60 98 4 70 77 end mkf classB //创建新框架classB cwf classB //转入新建的框架下 clear input id math 1 80 2 90 3 78 4 90 endclassA的数据如下:classB的数据如下:

1.连接不同的框架

我们看到classA和classB框架中的数据信息如上图所示,接下来我们在classB框架下用frlink命令进行不同框架之间数据的连接。代码如下:

frlink 1:1 id,frame(classA student_id) gen(mlink) //按照匹配变量id,对框架classA中student_id变量进行连接,将连接变量命名为mlinkbr

运行结果如下:

我们可以看到数据集中产生了一个新的变量mlink。frlink命令相当于是建立了一个框架之间的对接接口mlink,通过这个接口,当前框架里的数据就可以访问目标框架里面的数据。

2.访问其它框架下的变量

在有了连接变量之后,怎么能够访问其它框架下的变量呢,接下来先简单介绍一下frlink的搭档 frget。

frget命令的语法如下:

frget varlist,from(linkname) [rename_options] (1)frget newvar =varname,from(linkname) (2)

语法(1)表示将指定的变量通过linkname连接的框架内复制到当前框架中。在这个例子中linkname就是我们刚刚创建的变量mlink,如果我们想连接classA中相同id下的学生历史成绩。则代码为:

frget history,from(mlink)br

结果如下:

同理如果我们还想获取学生的英语成绩。则代码为:

frget english,from(mlink)br

结果如下:

从运行结果中我们可以看到,通过frget命令,我们将classA框架中的history成绩和english成绩成功连接到了classB当中,而起到连接作用的则是我们之前用frlink命令所创建的连接变量mlink。

语法(2)表示若获取的是目标框架中的单个变量varname,也可以在当前数据集中将其重命名为newvar。

frget B_history=history,from(mlink) //获取成绩信息变量history,并在当前数据集中命名为B_historybr

结果如下:

最后介绍一下frget语法(1)中[rename_options]功能,该功能有三个选项 prefix(string)suffix(string)exclude(varlist),它们分别可以为所连接到的变量添加前缀、后缀以及排除掉特定的变量。以刚刚的原始数据为例,我们将连接到的数据加上student作为前缀。
frget *,from(mlink) prefix(student_) //其中 * 是指将所有的数据全部复制到当前框架中。br

运行结果如下:

同理将连接的数据加上student 作为后缀:
frget *,from(mlink) suffix(_student)br

exclude(valist)是将特定的数据排除掉,例如:
frget *, from(mlink) exclude(his*) //将所有的变量连接到当前框架的数据中,但变量中有前缀his的除外br如上图所示,这次只连接到了english变量的数据,并没有连接到以his开头的history变量的数据。

总结来说,frlink命令和frget是相辅相成的,frlink为frget提供连接接口,而frget则可以利用该接口进行数据的复制和转移。

今天的介绍到这里就结束啦,不过frlink作为Stata16的新命令,还有很多知识需要学习哦~





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

《唐探3》做错了什么?|来自150万字影评的证据

爬虫俱乐部年度总结|《请回答2020》

春节假期临近,来爬爬豆瓣看看有什么好剧
putdocx生成Word文档so easy!

模糊匹配我只用这一招!

利用tushare获取财务数据

爬虫实战|Selenium爬取微信公众号标题与链接

轻轻一点,就知有没有|rqrs命令介绍

强大的正则表达式

自动群发邮件(二)——附带附件

自动群发邮件--email和smtplib基本模块的使用

批量处理变量名和标签的小方法

计算工作日的小能手——workdays

Seminar | 企业错报与银行贷款合同

Seminar | 共同基金行业的性别歧视
Seminar | 来自女儿的塑造:高管、女性社会化与企业社会责任

小贴士:Markdown的基本语法

听说相貌也能量化 | 调用百度人脸检测API实现颜值打分

列出指定属性的变量|findname命令比ds命令

新一代的标签转码小能手
【爬虫实战】亚马逊网站Top100畅销书爬取

Json文件好帮手——JsonPath

数据转置pro之sxpose2
文件"搬家"小助手:mvfiles

pyecharts绘图——河流图展示

你知道MDPI期刊的热门题目吗?

关于我们


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

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

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

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