查看原文
其他

如何快速生成分组变量?

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

本文作者:杨慧琳

文字编辑:王碧琪

技术总编:李朋冲

重磅!!!爬虫俱乐部将于2019年10月2日至10月5日在湖北武汉举行Python编程技术培训,本次培训采用理论与案例相结合的方式,旨在帮助零基础学员轻松入门Python,由浅入深学习和掌握Python编程技术,尤其是爬虫技术和文本分析技术。该培训目前在火热招生中,点击《爬虫俱乐部2019十一Python编程技术培训报名啦!》或点击文末阅读原文,了解培训详细信息,抓紧时间报名吧!

在进行数据处理时,我们经常会遇到诸如“将变量a的取值按照年份进行五等分”、“将变量b的取值按行业年份进行三等分”之类的变量处理标准。Stata也提供了多个可用于变量等分的命令,如xtile、fastxtile等,可以将变量取值依据从小到大的顺序分为多个组别。但以上命令在执行分组操作(by或者bysort)时却无能为力。近期小编在处理数据时也遇到了这一问题,正踌躇着是否写个循环实现时,突然眼前一亮,捕捉到一个更加强大的命令——astile 


astile命令比Stata官方的xtile命令运行速度更快,在处理较大数据集时也具有一定优势。与xtile、fastxtile等Stata的官方命令不同,astile命令支持分组操作,即可以与by或者bysort命令连用。例如,我们希望筛选出各年营业增长率位于行业前10%的企业,便可使用astile命令轻松实现。 

astile作为一个外部命令,在使用前也需通过“ssc install astile”进行安装,其基本语法如下:
astile newvar = exp [if] [in] [, nquantiles(#) qc(string) by(varlist)]
其中,exp是需要进行等分的变量,newvar是新生成的含有exp等分信息的变量。astile命令的主要选项包括:
 
nquantiles(#):表示需要将变量取值由小到大划分为#个等级,默认为nq(2),即以中位数为界二等分;
qc(string):定义变量进行等分的数据子集或特定变量,可以是数值型或字符型;
by(varlist):以varlist为分组变量,在每组中将exp的取值划分为#个等级。
 
接下来,我们以Stata自带的auto.dta数据集为例,介绍astile命令的主要用法。
 
1nq()选项
选取变量price,将其整体取值分为1-10的十个类别,并将等分信息存储于新变量price_10之中:
sysuse auto, clearastile price_10 = price, nq(10)tab price_10 //列示price_10的取值情况


 

2by()选项
首先,选取变量foreign为分组变量,分别在foreign=0和foreign=1两组中,将price的取值分为四个等级: 
astile price_4 = price, nq(4) by(foreign)
其中,新变量的名称可以自行设置。如,将其设置为price_40,其结果也完全一致: 
bysort foreign: astile price_40 = price, nq(4)
其次,分组列示变量price_4的取值情况:
bysort foreign: tab price_4


 
3qc()选项
对变量price基于foreign=0时的数据子集分为四个类别,并计算price的3个等分断点。其次,在foreign=1的情况下,依据先前得出的3个等分断点,将price的观测值分配到对应组别中。结果如下:
astile price_41 = price, nq(4) qc(foreign==0)by foreign: sum price, detail //列示price在两个组别中的描述性统计情况



由上图可知,国产车价格的上四分位数、中位数和下四分位数分别是:4184、4782.5和6234。由此,进口车的价格将依据如下四个等级区间 (-∞,4184)、[4184,4782.5)、[4782.5,6234)、[6234,+∞)进行划分,并在对应区间内分别取值1、2、3、4。 

此时,当foreign=0时,price的处理结果与按照foreign分组得到的结果一致。而在foreign=1部分,由于price的等级划分标准是基于第一阶段计算出的断点,且并不要求剩余观测值被严格划分为四等分,因此与按照foreign分组得到的结果不同,如下图所示:


我们也可通过如下命令,直观查看qc(foreign==0)选项与分组处理的结果差异:
tab price_41 if foreign==0tab price_41 if foreign==1



另外,astile命令的qc(foreign==0)选项和“if foreign==0”条件语句也存在差别。若执行“astile price_41 = price if foreign == 0, nq(4)”,在foreign取值为1的部分,price_41的观测值将被替换为缺失值。

以上就是astile命令的常见用法介绍。与其他等分命令相比,astile命令的最大亮点是支持分组计算,且允许用户加入多个组别变量,从而使数据处理变得更加简单!


对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!

往期推文推荐

用Stata实现数据标准化

字符串方法介绍
Jupyter Notebook的使用

Stata16新功能之“框架”——frlink连接多个数据集(3)

Stata16新功能之“框架”——基础命令大合集(2)

三分钟教你读懂Python报错

解析XML文件

命令更新之reg2docx:将回归结果输出到word

命令更新之t2docx——报告分组均值t检验

爬虫俱乐部2019十一Python编程技术培训报名啦!

数据类型——Dict、Set与Frozenset简析

数据类型介绍——tuple、list和range对象
把pdf文件批量转成docx文件
格式化字符串方法的比较
朝花夕拾—— 如何输出内存中的矩阵与绘图
Stata16新功能——定义图形元素的绝对大小
将数值型计算“一网打尽”——(1)
Stata16新功能之“框架”——读入多个数据集(1)
手持Python,斗图不输!

关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。


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

投稿邮箱:statatraining@163.com

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

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

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