查看原文
其他

fillin一下,平衡回来~

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

本文作者:温和铭,中南财经政法大学统计与数学学院

本文编辑:赵一帆

技术总编:戴   雯

Stata&Python云端课程来啦!

       为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~爬虫俱乐部推出了Python编程培训课程Stata基础课程Stata进阶课程Stata文本分析正则表达式网络爬虫基本字符串课程。报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦。我们在这篇推文的最后提供了每门课程的课程二维码,大家有需要的话可以直接扫描二维码查看课程详情并进行购买哦~


导读
在收集面板数据时,你是否会遇到这些问题:某些年份的某些变量值出现缺失、或者一些样本个体在某些年份因为不可抗力、无法再跟踪或不满足条件就不再有数值,为后续的分析增添了不少烦恼。


大多数情况下(尤其是大样本),这些问题都是很难避免的,这样收集到的数据就是妥妥的非平衡面板数据。针对非平衡面板数据,学术界也有相应的实证分析方法,但是,能把它转化为更易于处理的平衡面板难道不香吗?接下来,让我们看看如何利用fillin 语句,进行简单的非平衡面板到平衡面板的转换。

一、概念梳理
在正式转换之前,先让我们理理清楚到底什么叫“非平衡面板数据”。首先介绍一下平衡面板,如果每一期在样本中的个体完全一样,就可以称之为平衡面板数据。如下例,我们想要研究某行业的企业状况,三年间每年的企业都是相同的ABC三家,这就是一个平衡面板。

与之相对应的,如果某些个体数据缺失,或者有新的个体加入进样本中(追踪调查中出现个体死亡或退出调查、企业倒闭或更名重组等等特殊原因),接上例,在2018年A企业倒闭,新设立一家E企业,2019年又加入了E企业,这就成了一个非平衡面板。

二、初识fillin
从字面意思上不难理解,fill in就是“填写,充满”的含义,在Stata中,fillin的语法也比较简单:
fillin varlist*fillin添加缺失数据的观察值,使各个变量的所有交互都存在,从而使数据矩形化。
注意:1、fillin还将变量fillin添加到数据集。fillin为1,表示对应值是使用fillin创建的观察值,为0表示对应值是之前存在的观察值。2、输入的变量不能是长字符串格式,且变量数少于两个会报错:“too few variables specified”
三、案例演示:城市卫生统计面板转换

在衡量一个地区的医疗规模和水平时,医疗卫生机构数、床位数、医生数以及由此衍生出来的人均医生数、人均病床数,都是重要的统计指标。在此,我们以南京市、武汉市两地的医院及卫生院数、床位数和医生数为例,进行非平衡面板数据到平衡面板数据的转换。


1.搜集原始数据
首先,我们在国泰安CSMAR数据库的区域经济模块中,找到所需的指标并下载数据,这里选取了1990-2019年的面板,存储为Excel文件,原始数据如下图:

其中,数据标识为1代表全市,2代表市辖区。不难发现,此面板中的年份变量和数据标识变量都存在不少的缺失,如1990-1994年两个城市都缺少全市的指标,原始数据为非平衡面板数据。

2.数据预处理
第一步:使用import excel将原始数据导入Stata。
clear allcd D:\STATA16\卫生统计import excel using 卫生统计.xlsx,clear first case(lower) //导入.xlsx格式文件,将第一行设为变量名,并将变量名改为小写英文字母格式

导入之后,感觉哪里不太对劲,数据全是字符型,还有两行多余的文字和一个用不上的城市代码变量,不够直观的变量名对于数据使用者的阅读体验也不太友好,直接用这个面板进行转换肯定是不ok滴~

接着进行第二步:数据整理。
drop in 1/2 //删除多余的前两行drop ctnm_id //删除城市代码destring sgnyea datasgn culhct01 culhct02 culhct03, replace //将除城市名外的所有变量转换为数值型rename (sgnyea ctnm datasgn culhct01 culhct02 culhct03) (年份 城市 市区标识 医院及卫生院个数 床位数 医生数) //对变量进行重命名label define 市区标识lb 1"全市" 2"市辖区" //给变量值贴上中文标签label values 市区标识 市区标识lb //让数据编辑器中显示变量值的标签

一顿操作猛如虎,我们总算拥有了一个相对规整的面板数据,但是!它还是个非平衡面板!
于是乎我们再往下第三步:数据描述。看看到底是哪些地方破坏了"平衡"。这里用到了一个groups命令,简单来说,groups能够分组显示频数和百分比,具有类似Excel中数据透视表的功能。它的语法如下:

groups varlist [if] [in] [weight] [, options]

注意:在使用groups之前,要输入ssc install groups进行安装哦~此处仅介绍选项中fillin的用法(此外还有按条件显示结果、将结果保存为数据集等其他选项,感兴趣的读者可以help groups自行食用),该选项可以将数据中没有出现的变量组合也显示出来,并标记出现频率为0。我们可以对比一下有无fillin选项的结果:

可以看到,添加了fillin选项的输出结果多了之前没有的时间、城市和城市标识的组合,如”1990-南京市-全市“和”1990-武汉市-全市“等,表格第四列将这些原本没有的组合标记频数为0,直观地对非平衡面板缺失的具体数据进行了描述。即将使用到的fillin命令可以把这些缺失给补齐。

3.面板平衡化
前面铺垫了这么多,就是为了最后放大招,话不多说,上代码!
fillin 年份 城市 市区标识 //填补缺失的年份-城市-市区标识组合

锵锵~所有之前“隐身”的年份-城市-城市标识变量组合立马现出原形,我们的面板数据终于平衡了!数据中新生成的变量_fillin标记了观测值的来源,1表示后期填补的组合。用drop _fillin语句就可以去除这个附加变量啦~


到此,我们就成功地用短短一行fillin语句,把一个非平衡面板数据转换成了平衡面板数据,是不是很方便呢?但是,还有一件事!表里一下冒出了很多缺失值,让人有些不知所措,不过不用担心,我们可以用替换、拟合等方式进行数据填充,具体操作请移步往期推文"如何处理缺失值?这一篇搞定!"这里就不再赘述了。

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



腾讯课堂课程二维码








            


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











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

         播放列表中的歌单排行 

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

         Meta Analysis in Stata17      

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

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

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

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

随机森林-Random Forest 

复原之神--preserve&restore

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

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

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

【案例展示】Python与数据库交互

学好这一手,英语词典常在手 

玩转Stata中的数学函数

用spmap看中国空气质量

戳穿围城面具:安利&劝退一个专业

走进图文并茂的攻略世界 

玩转word文档“大变身”——wordconvert

数据读入|一文读懂用Stata读入不同类型的数据

简述递归

OpenCV库——轻松更换证件照背景色

800万年薪!还有谁?!

千古伤心词人,词伤几何?

去哪儿网攻略爬取——跟我一起去大理吧

"有你才有团"——Stata爬取王者荣耀英雄海报

爬虫实战|嚣张的徽州宴老板娘错在哪?

关于我们 


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

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



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

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

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


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

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