查看原文
其他

数据集合并的新路子-frlink命令

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

本文作者:万   浩,中南财经政法大学统计与数学学院

本文编辑:王玉洁

技术总编:戴   雯

Stata&Python云端课程来啦!

       为了平衡团队运营成本,维系公众号的运营,也与国内动辄数千元的Stata课程缩短差距,我们的网课不得不上调价格,我们已于11月1日Python课程的价格调整为249.9元Stata进阶课程调为249.9元Stata基础课程调整到299.9元。感谢大家的支持,对报名有任何疑问欢迎在公众号后台和腾讯课堂留言~我们在这篇推文的最后提供了每门课程的课程二维码,大家有需要的话可以直接扫描二维码查看课程详情并进行购买哦~


一、frlink命令介绍

相较于Stata15,Stata16有了新功能frame,在Stata15以下的版本是无法使用frame的。Stata中frame的功能类似Excel的工作表sheet,是为了方便在同一个操作窗口中打开多份数据集并对数据集进行处理,而不需要另外加载Stata软件打开数据集。  

Stata中frame有一系列命令,具体可以 help frame 进行了解,本推文的主要内容是介绍frlink命令,frlink是通过连接变量建立两个框架之间的连接,与frget配合使用进行框架合并。  
frlink合并的逻辑很简单,但是会因为标志变量的数量、是否同名、客体框架的名称、变量名称是否会出现冲突而存在细微的差别。下面让小编依次介绍不同情况下的合并过程。


二、不同类型的合并

1.两框架有同名单一标志变量的合并

下面的程序中,框架english的数据是学生的英语成绩,不同的学生用变量id区分,取值为1到10。我们随机生成了学生的英语成绩;框架math类似,给出了学生的数学成绩。两个数据显然需要按照学号id进行合并,由于两个框架中的标志变量唯一,且变量名一致,均为id,所以这是同名单一标志变量的框架合并。命令frlink 1:1 id,frame(english)是在math框架下,以math为主框架,用主框架中的标志变量id,对客体框架english中的标志变量id建立链接,值得注意的是,因为标志变量同名,frame()中没有指明标志变量,默认为id,命令如下:

clear all frame rename default englishset obs 10 gen id = _n gen int english = uniform()*40+60br frame create math cwf math set obs 10 gen id = _n gen int math = uniform()*40+60br frlink 1:1 id, frame(english) gen(eng_link) //通过连接变量建立两个框架之间的连接frget english, from(eng_link) //通过连接变量将其他框架中的数据复制到当前工作框架中
合并好的结果如下:

2.两框架有异名单一标志变量的合并

当两框架有异名单一标志变量的时候,该如何合并呢?我们首先在框架english中生成序号、英语成绩两个变量,在框架math中生成序号和数学成绩,现需对两个框架完成合并。
与同名单一标志变量的合并不同的是,english中标志变量的变量名为id,而框架math中标志变量的变量名为id1,属于异名单一标志变量的合并。命令frlink 1:1 id1, frame(english id) gen(eng_link)展现出了处理方法的差别,由于程序的当前框架为math框架,因此是用主框架中的id1标志变量对客体框架中的id标志变量进行连接,frame()中不仅需要指明客体框架名称,还要写出客体框架的标志变量,命令如下:
clear all frame rename default englishset obs 10 gen id = _n gen int english = uniform()*40+60br frame create math cwf math set obs 10 gen id1 = _n gen int math = uniform()*40+60frlink 1:1 id1, frame(english id) gen(eng_link)frget english, from(eng_link)
合并好的结果如下:

3.两框架有同名多个标志变量的合并

接下来我们看看两框架有同名多个标志变量时的合并,首先生成的主框架default为学生成绩数据,包括学生id,班级,年份,math, English, history, arts 7个变量,客体框架teacher为任课老师数据,包括班级,年份,math English, history, arts 6个变量,只是他们代表的是任课教师的姓名,两个数据按照班级和年份合并。此时,主框架中的标志变量有2个,变量名为class和year,客体框架中标志变量的变量名也为class和year,属于有同名多个标志变量的合并。  

命令cwf default表示主框架为default框架。命令frlink m:1 class year, frame(teacher)表示用主框架中的class和year两个标志变量连接客体框架teacher中的class、year两个标志变量,因两个框架中的变量名一致,frame() 中没有指出客体框架的标志变量,直接默认与主框架中的一致。因未指定主框架中生成的连接变量名,连接变量将与客体框架teacher同名。命令frget math_teacher=math english_teacher=english history_teacher=history arts_teacher=arts, from(teacher)表示将框架teacher中的math、english、history 和arts数据通过teacher连接变量合并到框架default中,并将这些搬迁过来的变量重新命名为math_teacher、english_teacher、history_teacher和arts_teacher,命令如下:

clear all set obs 100gen class = mod(_n,2)+1bysort class: gen year=2018+mod(_n,2)bysort class year: gen id = _ngen int math = uniform()*40+60gen int english = uniform()*40+60gen int history = uniform()*40+60gen int arts=uniform()*40+60br frame create teacher cwf teacher input year class str20 math str20 english str20 history str20 arts 2018 1 祖冲之 川普 司马迁 张择端2019 1 牛顿 奥巴马 班固 顾恺之2018 2 张衡 伊万卡 修斯底德 达芬奇2019 2 阿基米德 季莫申科 克林顿 仇英end cwf default frlink m:1 class year, frame(teacher)br frget math_teacher=math english_teacher=english history_teacher=history arts_teacher=arts, from(teacher)
合并好的部分结果如下:

4.两框架有异名多个标志变量的合并

最后我们一起了解下两框架有异名多个标志变量的合并,这里主框架和客体框架的形式与同名多个标志变量中的程序一致,区别在于主框架default中的标志变量变量名为class和year,而客体框架teacher中标志变量的变量名为class1和year1,属于有异名多个标志变量的框架合并。因此,在命令frlink m:1 class year, frame(teacher class1 year1)中,frame() 指明了客体框架中的标志变量class1和year1,命令如下:

clear all set obs 100gen class = mod(_n,2)+1bysort class: gen year=2018+mod(_n,2)bysort class year: gen id = _ngen int math = uniform()*40+60gen int english = uniform()*40+60gen int history = uniform()*40+60gen int arts = uniform()*40+60br frame create teacher cwf teacher input year1 class1 str20 math str20 english str20 history str20 arts 2018 1 祖冲之 川普 司马迁 张择端2019 1 牛顿 奥巴马 班固 顾恺之2018 2 张衡 伊万卡 修斯底德 达芬奇2019 2 阿基米德 季莫申科 克林顿 仇英end cwf default frlink m:1 class year, frame(teacher class1 year1)br frget math_teacher=math english_teacher=english history_teacher=history arts_teacher=arts, from(teacher)
合并好的部分结果如下:

通过以上4种不同情况的介绍,可以了解到frame系列命令中frlink的使用,在对数据集进行合并的时候,不需要另外用Stata软件打开数据集,只需要几行命令即可哦!

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




腾讯课堂课程二维码








            


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











往期推文推荐
         Seminar丨附近的公司:利用卫星图像研究本地信息优势

        线性同余法生成伪随机数 

         [技能篇]多线程爬虫

“好哭”是衡量一部好电影的标准吗?

Stata&Python云端课程来啦!

带你了解Stata中的矩阵

Seminar|总统的朋友:政治关联与企业价值
爬虫实战 | 爬取中国天气网

爬虫实战 | 爬取东方财富网经济数据——以居民消费价格指数(CPI)为例

Seminar|媒体关联董事对融资和外部治理的影响神奇的组内交叉合并 PDF分章节转TXT并实现可视化——以胡景北知青日记1971至1978年为例

万物皆可开——shellout妙用

无处不在的系列配置项|从零开始的Pyecharts(三)

使用Python制作自动聊天机器人  

fillin一下,平衡回来~

order命令——快速改变变量顺序的利器 Ajax应用场景——以获取雪球网港股代码及公司名称为例

播放列表中的歌单排行 

在Stata中轻松运用program编写命令

Meta Analysis in Stata17      

芒果TV视频弹幕爬取之《我在他乡挺好的》

Stata中的判断神器——confirm命令

cngdf——名义GDP与实际GDP之间的摆渡船

最近《扫黑风暴》有点火爆!我从豆瓣评论中发现了这些……

随机森林-Random Forest 

复原之神--preserve&restore

合并,“纵”享新丝滑:frameappend & xframeappend
什么是全局配置项?|从零开始的Pyecharts(二)帮你拿下数据可视化|从零开始的Pyecharts 

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

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

关于我们 


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

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



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

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

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



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

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