查看原文
其他

数据长、宽整型之另辟蹊径

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

本文作者:俞诗琪

文字编辑:张馨月

技术总编:李朋冲


爬虫俱乐部将于2020年1月5日至11日湖北武汉举行为期一周的Stata编程技术定制培训,此次采取初级班和高级班分批次培训。课程通过案例教学模式,旨在帮助大家在短期内掌握Stata软件编程、金融计量知识和实证分析方法,使大家熟悉Stata核心的爬虫技术,以及Stata与其他软件交互的高端技术。目前正在火热招生中~详细培训大纲及报名方式,请点击《爬虫俱乐部2020第一期Stata编程训练营开始报名啦!》或点击文末阅读原文呦~


前期推文朝花夕拾|长宽数据转换——reshape命令reshape命令在长、宽数据转换中的用法进行了详细介绍,可谓是Excel“重症患者”的福音!但是,小编现在想当场考考大家:若想将一个长型数据转成宽型,reshape wide命令后的选项如何设置?“i() j()”该写什么变量名?换成reshape long命令又如何呢?

大家或许可以支支吾吾地说些道道出来,但仍不十分确定,然后弱弱地说道:“我先去回顾下上次推文,等会告诉你!”

其实不必这么麻烦,今天小编就发扬活雷锋精神为大家介绍reshape的“简化版”命令——gatherspread命令。这两个命令无需使用reshape的选项“i()j()”,十分简单易上手。虽然不能完全取代reshape命令在数据整型中的地位,但多数情况下仍然适用。

在使用之前,通过“ssc install tidy”安装gatherspread命令。接下来,分别介绍这两个命令的主要用法。

一、gatherspread命令

gather命令与reshape long功能相似,旨在将宽型数据转换成长型,其基本语法如下:

gather varlist, [variable(newvar) value(newvar)label(newvar)]

各选项定义如下:

1varlist定义当前宽型数据中用于转换的单个或多个变量;

2variable定义一个名为newvar的新变量,否则默认新变量名为variable,其值为varlist变量名

3value定义一个名为newvar的新变量,否则默认新变量名为value,其值与varlist相同

4label定义一个新变量,用于存储varlist变量标签。

 

spread命令与于reshape wide命令功能相似,旨在将长型数据转换成宽型,其基本语法如下:

spread variable value ,[label(varname)]

各选项定义如下:

1variablevalue分别对应gather命令在长型数据中生成的两个新变量;

2label用于存储新变量标签值。

 

二、gatherspread命令用法示例

采用Stata自带数据集auto.dta,为使操作更加直观,仅使用前5行观测值及前三个变量示例。如下:

sysuseauto.dta, clearkeep in 1/5keep make weight mpg

1、不添加选项

可知,图示为宽型数据,采用如下程序将其转换为长型数据:

gather weight mpg

依据上图,在转换后的长型数据中,变量variable提示了value的各行观测值来自于宽型数据的哪个变量。可见,value取值与原始数据集保持一一对应。

 

而后,采用spread命令将该长型数据集返回为原始宽型数据:

spread variable value

以上操作是不是很直观呢?我们再来回顾一下通过reshape long命令如何实现上述“宽型长型宽型”的结果。首先需要将变量weight和变量mpg重命名为“valueweight”和“valuempg”,而后进行转换,如下:

rename weight valueweightrename mpg valuempgreshape long value,i(make) j(variable) string

同理,使用reshape wide命令将其返回为宽型数据,如下:

reshape wide value,i(make) j(variable) string

可知,两种处理方式效果相似,但本例中weightmpg的变量名最初不符合要求(即不满足“共同名称+选项j的形式),通过reshape命令进行转换步骤较为繁琐。因此,在变量名无明显规律时,更推荐使用gather命令和spread命令

                            

2、添加选项用法

在该部分,通过variable()value()选项定义我们所需的新变量名。依然采用上述原始数据,如下:

sysuse auto.dta, clearkeep in 1/5keep make weight mpggather weight mpg, variable(item) value(observation)

依据上图,新生成的两个变量以选项中自定义的“item”和“observation”命名。而在转换为原始宽型数据时,也是将其作为转换变量,如下:

spread item observation

3、在转换过程中保留变量标签

细心的朋友可能会发现一个问题,原始变量标签在经过长宽型转换后发生变化。分别查看原始的与经过一次长宽型转换后的数据特征,如下:

describe

gather weight mpgspread variable valuedescribe

可见变量weightmpg的标签分别由原来的“Weight(lbs.)”、“Mileage(mpg)”换为了“weightvalue”、“mpgvalue”。如何保持原始数据集变量标签不被修改呢?此时我们需要用到选项label,如下:

sysuse auto.dta, clearkeep in 1/5keep make weight mpggather weight mpg,label(x)

spread variable value,label(x) describe

由此,gather命令后添加选项label(x),便可在自定义的变量x中存储转换变量的标签值。同样地,在spread命令后加选项label(x),也能将存储的标签值贴回对应变量。

 

通过以上介绍,相信大家已经基本掌握gather命令和spread命令的用法了。这两个命令操作较为直观,可以缓解我们用错reshape命令的尴尬。但其也存在不足,由于选项较少无法与reshape命令的丰富用法相媲美。在实践中还需视具体情况选择合适的命令,让Stata更好地服务于我们的工作学习!


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

10分钟带你走进宝藏数据库BvD

实战演练——爱婴医院中莆田系医院数据分析(二)

实战演练——爱婴医院中莆田系医院数据分析(一)

给你一个贴心的reshape应用

asrol命令——让你的描述性统计信息滚动起来

Python带你看文献—xpath抓取知网文献

您有一份天气预报待签收 

听说会Stata的人,数学不会太差?

批量修改路径

妙用正则表达式--Python中的re模块

豆瓣电影评分之数据爬取与可视化的实现 

为了辅导作业,这位家长竟然...

走进列表的世界——列表方法(二)

走进列表的世界——列表方法(一)

朝花夕拾|长宽数据转换——reshape命令

Stata有音乐包啦!

对《陈情令》的数据可视化分析

关于我们

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

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

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

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