查看原文
其他

熟悉又陌生的reshape

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

本文作者:程利敏(武汉大学博士生)

文字编辑:朱巧利

技术总编:张计宝

在《长宽数据转换——reshape命令》和《给你一个贴心的reshape应用》这两篇推文中,大家已经掌握了reshape命令的用法和相关的几个案例,本文在原有用法和案例的基础上,继续讲解个小例子,让大家多维度的掌握这个命令。

为了方便读者模拟操作,我们把推文中涉及的数据文件上传到爬虫俱乐部的云端数据源。


案例


数据集打开后如下:


stkcd 代表公司,year代表年份,country代表公司投资国家。我们的要求是把某年某公司的所有投资国家汇总在一起。

第一步,显然这是一个长数据,我们需要把他转换成宽数据。
首先,我们熟悉的reshape命令是:

此案例中按照通常的理解和做法,stubnames是指需要转换的对象即countryvarlist是作为ID的变量即stkcdvarname是指长数据转换成宽数据时一个已经存在的变量即year
然而,系统报错,原因是yearstkcd里并不是唯一。
 reshape wide country,i(stkcd) j(year)

其次,深挖reshape功能,解决stkcdyear的不唯一问题。statai(varlist)的解释是确认ID的标识,varlist可以不只是一个变量,可为多个变量;j(varlist)是长数据转换成宽数据是一个已知的数据即可。


为了确定唯一的ID和创建ID组内已知的变量,我们尝试建立一个新的变量:
bysort stkcd year:gen n=_n
数据如下图所示:

此时,就可以解决ID的唯一性问题,和ID组内已知变量的问题。
最后,重新使用reshape命令进行数据转换。
reshape wide country,i(stkcd year) j(n)

数据如下:


第二步,把转换好的宽数据记录在一个新的变量allcountry下。在egen下有个命令是concat,它可以把字符型的变量进行相加汇总产生一个新的变量。
egen allcountry=concat(country*),p(“”)
利用order调整顺序后,数据如下:

至此,我们已经解决了我们的问题,即把长数据中内容合并在一起。
我们又一次详细介绍了reshape命令在实际数据中的应用。看完这编推文是不是对你有帮助呢?快和我们一起动手获取网络数据来试试它吧!




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

NBA球员薪资分析——基于随机森林算法(二)

NBA球员薪资分析——基于随机森林算法(一)

高亮输出之唐诗作者

湖北省各市疫情数据爬取

古代诗人总去的这些地方你一定要知道!

DataFrame数组常用方法(二)

ftools命令——畅游大数据时代的加速器

卫健委的“糊涂账”

Pandas中数据的排序与切片

DataFrame数组常用方法

巧用局部宏扩展函数dir

过了14天潜伏期真的没事了?

Pandas基本数据类型介绍

NumPy数组基本介绍

“个性化”sortobs命令,教你实现排序自由

携手战疫,我们在行动

恭贺新春,平安顺遂|各省疫情关注度地图

过年观影指南(二)

关于我们



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

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


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

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