frlink:让连接更具“目的性”
本文作者:杨慧琳
文字编辑:朱巧利
技术总编:王 悦
爬虫俱乐部将于2020年1月5日至11日在湖北武汉举行为期一周的Stata编程技术定制培训,此次采取初级班和高级班分批次培训。课程通过案例教学模式,旨在帮助大家在短期内掌握Stata软件编程、金融计量知识和实证分析方法,使大家熟悉Stata核心的爬虫技术,以及Stata与其他软件交互的高端技术。目前正在火热招生中~详细培训大纲及报名方式,请点击《爬虫俱乐部2020第一期Stata编程训练营开始报名啦!》或点击文末阅读原文呦~
frlink {1:1|m:1} varlist₁, frame(frame₂ [varlist₂]) [generate(linkvar₁)]
第二步:依据连接变量整合数据集
frget varlist, from(linkvar₁) [rename_options]
frget newvar = varname, from(linkvar₁)
依据上一步生成的连接变量linkvar₁,从frame₂存储的数据集中获取一系列变量varlist,变量名保持不变。若获取的是目标数据集中的单个变量varname,也可在当前数据集中将其重新命名为newvar。from(linkvar₁)为必选项。
(1)在当前默认框架下生成一个面板数据集,用于存储2015-2017年间三个班级36名学生的数学和英语成绩;
(2)分别新建两个框架,用于存储2015-2017年间三个班级的数学和英语任课老师信息;
(3)使用frlink命令连接三个框架下的数据集。
clear all
frame rename default student //将当前默认框架重命名为student
set obs 36
gen year = mod(_n,3)+2015
bysort year: gen class= mod(_n,3)+1 //生成班级号
bysort year: gen stu_id = _n //生成各班学生编号
gen math=50+uniform()*50 //生成数学成绩
gen english = 50+uniform()*50 //生成英语成绩
数据情况如下:其中,每一年对应3个班级,编号为1、2、3,每个班级对应4名不同学生。每对year-class联合取值出现4次。
mkf math_teacher //创建新框架math_teacher
cwf math_teacher //转入新创建的框架下
clear
set obs 9
gen year=2015 in 1/3
replace year=2016 in 4/6
replace year=2017 in 7/9
bysort year: gen class_id = _n
gen teacher ="Math"+string(_n)
mkf eng_teacher
cwf eng_teacher
clear
set obs 9
gen year=2015 in 1/3
replace year=2016 in 4/6
replace year=2017 in 7/9
bysort year: gen class_id = _n
gen teacher ="Eng"+string(_n)
cwf student
frlink m:1 year class,frame(math_teacher year class_id) gen(mlink)
frget math_teacher=teacher, from(mlink)
frlink m:1 year class,frame(eng_teacher year class_id) gen(elink)
frget eng_teacher=teacher, from(elink)
经过以上步骤,我们便整合了三个数据集中的信息。当然,以上结果也可以利用merge命令实现,但其要求各个数据集中具有相同的匹配变量,且需分别保存与调用数据集。
对此,我们也可总结出frlink命令的一些优点:首先,可以在同一内存中实现数据集合并,避免了多次保存与调用数据集的冗余操作;其次,允许各个数据集的匹配变量名不同,通过某一特定的连接变量获取数据;再次,用户可以依据自身需求从目标框架中获取特定变量,实现更加精准化的数据合并。但是,frlink命令用法不太灵活,不如merge命令直观。同时,当前其仅支持1:1和m:1两种匹配形式,不支持1:m的匹配形式,这也使frlink命令的应用受到一定的限制。
“气功”研究哪家强
数据长、宽整型之另辟蹊径
10分钟带你走进宝藏数据库BvD
给你一个贴心的reshape应用
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。