查看原文
其他

Stata16新功能之“框架”——frlink连接多个数据集(3)

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

本文作者:王   悦

文字编辑:王碧琪

技术总编:李朋冲 

重磅!!!爬虫俱乐部将于2019年10月2日至10月5日在湖北武汉举行Python编程技术培训,本次培训采用理论与案例相结合的方式,旨在帮助零基础学员轻松入门Python,由浅入深学习和掌握Python编程技术,尤其是爬虫技术和文本分析技术。该培训目前在火热招生中,点击《爬虫俱乐部2019十一Python编程技术培训报名啦!》或点击文末阅读原文,了解培训详细信息,抓紧时间报名吧!

在之前的推文《Stata16新功能之“框架”——读入多个数据集(1)》和《Stata16新功能之“框架”——基础命令大合集(2)》中,我们将框架的定义及所有的基础命令做了详细的介绍。有时我们还会遇到这样的情况:目标变量存在于两个甚至多个不同的数据集中,此时,我们需要某种方法将数据集连接起来,使得不同数据集中的变量能够相互连通,以便进一步分析。

Stata16通过引入新命令frlink,打破了变量间的“隔阂”。frlink可以根据某个变量,在当前框架与另一指定框架之间创建连接,使得被连接框架中的所有变量能够被当前框架访问。

frlink的语法如下:
frlink {1:1 | m:1} varlist1, frame(frame2 [varlist2]) [generate(linkvar1)]
创建框架连接的方式分为两种——m:11:1其中m:1代表多对一匹配,当前框架中的多个观察值与另一框架中的相同观察值匹配,1:1可以视作m:1的特殊形式,表示当前框架中的一个观测值最多只能与另一框架中的一个观测值匹配。
varlist1被称为匹配变量,所有的连接都是基于匹配变量的相等性而形成的。当匹配变量的取值在两个框架中相等时,当前框架中的观测值与另一框架中的观测值进行匹配,从而形成连接。连接中可以指定多个匹配变量。
frame(frame2 [varlist2])指定被连接的框架名称为frame2,以及要匹配的变量名称varlist2。如果没有指定varlist2,则默认匹配变量在两框架中具有相同的名称varlist1。frame()选项为必选项。
generate(linkvar1)连接创建好后,将会向当前框架中添加一个变量,称为连接变量,如果未指定此选项,连接变量将与被连接框架frame2同名
 
1.      连接不同的框架
我们以Stata官网提供的数据persons.dta和txcounty.dta为例来说明frlink的具体用法和功能。首先对这两个数据集进行大致的了解:
clear frameswebuse persons //persons.dta默认被储存在框架default中br


persons.dta描述的是美国某些县的具体个人收入,其中countyid为县的编号。
frame create txcounty frame txcounty: webuse txcounty //txcounty.dta被储存在框架txcounty中frame change txcountybr

txcounty.dta描述了美国德克萨斯州下属某些县家庭收入的平均数,它同样包含了变量countyid。countyid看似为字符型变量,实际上是加了标签的数值型变量,我们可以使用命令codebook来查看其具体的标签值:

codebook countyid //查看countyid标签值对应的数值

其中Brazos对应的数值为1,Dallas对应的数值为2……具体结果如下:

接下来,对框架default和txcounty进行连接:

frame change default frlink m:1 countyid,frame(txcounty) //按照匹配变量countyid,对框架default和txcounty中的数据进行连接frlink dir //列出连接变量的名称frlink describe txcounty //列出连接变量的详细信息,并验证它是否有效br

       frlink的子命令frlink dir告诉我们,新创建的连接变量名为txcounty,这是因为我们没有添加frlink的选项generate()指定连接变量的名称,所以默认以被连接框架txcounty来命名连接变量,而frlink describe则表明该连接变量有效。连接完成后当前框架中的数据如下图所示:

       针对连接变量,有一点需要注意:不要随意修改连接变量,否则将会使其失效,这将影响后续对被连接框架中变量的访问。

replace txcounty = 0 if txcounty == 5frlink describe txcounty

       在更改了连接变量txcounty后,再使用frlink describe将会提示:由于连接创建后数据被修改,所以连接变量失效,建议输入frlink rebuild txcounty对连接进行修复。子命令frlink rebuild能够在数据更改或框架被重命名时重建现有连接。

frlink rebuild txcounty 

执行后,结果如图:

       这表明变量txcounty被成功重建。

 

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

进一步,在连接创建后,我们还可以利用函数frval()返回被连接框架中变量的值;也可以使用frget向当前框架的数据集中,添加被连接框架中的变量。我们通过下面的例子来简单介绍,如何调用被连接框架中的变量。

我们想在当前框架default中新生成一个变量,它等于变量income(框架default)除以变量median_income(框架txcounty)。我们会用到frval(lvar,var),其中lvar表示前述命令frlink创建的连接变量名,var表示需要使用的被连接框架中的变量:    
gen relative_income = income / frval(txcounty, median_income) summarize relative_income

如果我们想要把被连接框架txcounty中的变量median_income添加到person.dta中(default框架),然后进行一个线性回归,可以先使用命令frget将变量从被连接的框架复制到当前框架,程序如下:

frget median_income, from(txcounty) regress income relative_income median_income

可以看到,运行结果显示有一个变量从被连接框架中复制了过来,此时查看内存中的数据,能够观测到新生成的变量relative_income和复制过来的变量median_income。

框架作为Stata16新推出的功能,成功打破了在Stata内存中一次只能读入一个数据集的界限,框架和框架之间建立连接后,可以实现对被连接框架中数据的访问。在财务会计领域,某些指标的计算会涉及到不同数据集的变量,框架的存在使得我们对于此类指标的计算,多了一种全新的选择。

对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!

往期推文推荐

Stata16新功能之“框架”——基础命令大合集(2)
三分钟教你读懂Python报错
解析XML文件
命令更新之reg2docx:将回归结果输出到word
命令更新之t2docx——报告分组均值t检验
爬虫俱乐部2019十一Python编程技术培训报名啦!
数据类型——Dict、Set与Frozenset简析

数据类型介绍——tuple、list和range对象

把pdf文件批量转成docx文件

格式化字符串方法的比较

       朝花夕拾—— 如何输出内存中的矩阵与绘图

       Stata16新功能——定义图形元素的绝对大小

       将数值型计算“一网打尽”——(1)

       Stata16新功能之“框架”——读入多个数据集(1)

      手持Python,斗图不输!

      朝花夕拾——cnstock与cntrade强强联合

       Stata16之do-file更新(1)——再见外部文本编辑器~

关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。


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

投稿邮箱:statatraining@163.com

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

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

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