查看原文
其他

Ftools命令组之fegen命令介绍

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

本文作者:周宏杰

文字编辑:张馨月

技术总编:张计宝

导读

在往期推文Ftools命令组之fisid命令和fsort命令介绍》中,我们已经详细介绍了ftools的封装命令——fisid命令和fsort命令,本文中将继续介绍ftools的封装命令系列之一的fegen命令。


fegen命令


基本语法结构:

fegen [type] newvar = function(arguments) [if] [in] [, options]

fegen命令用于在大数据集中代替egen命令来加快函数运行速度。从语法中可以看出,fegen命令和egen命令一样,可以指定生成变量的类型(intlongfloat等)。虽然fegen处理速度有了极大的提升,但是目前fegen支持的函数不多,只能运行group函数(为数据进行分组编码)

为了展示fegen命令的效果,需要先生成一个大数据集。本文使用Stata自带数据集nlsw88.dta,重复生成该数据集10次之后,将这些数据纵向拼接起来得到一个大数据集tmp.dta,具体代码如下所示:

clearforv i=1/10{ sysuse nlsw88,clear save `i',replace}use 1,clearforv i=2/10{ append using `i'}save "tmp",replace

1egen命令和fegen命令速度对比

接下来对比egen命令生成group函数计算结果的耗费时间,展示fegen 命令的运行速度,为了使对比结果有更好的可信度,这里对tmp.dta数据集中的race变量运行egen命令和fegen命令各五次,然后对所耗时间取均值。具体命令如下所示:

*使用fegen命令scalar sum=0 //生成一个标量来存储5次运行程序所耗费的总共时间forv i = 1/5{ use tmp,clear timer clear 1 timer on 1 fegen 分组编号=group(race) timer off 1 timer list 1 scalar sum=sum+r(t1)}scalar avg=sum/5 //运行时间均值di "使用fegen命令耗费的时间为",avg*使用egen命令scalar sum=0 forv i = 1/5{ use tmp,clear timer clear 1 timer on 1 egen 分组编号=group(race) timer off 1 timer list 1 scalar sum=sum+r(t1)}scalar avg=sum/5 di "使用egen命令耗费的时间为",avg

具体结果如下所示:

从这个结果看出,各运行fegen命令和egen命令五次后,两个命令的运行时间均值有着显著差距,很明显,fegen命令运行速度比egen命令快2倍以上。

2)展示missing选项效果

当不带missing选项时,fegen group命令(即使用fegen命令运行group函数,为了简便,下面都称为fegen group命令)不会对缺失值进行分组,仍然生成缺失值;当使用missing选项时,fegen group命令将缺失值另外分成一个组。这里对tmp.dta数据集里面的occupation变量分别使用带有或者不带有missing选项的fegen group命令。具体命令如下所示:

use tmp,clearfegen 分组编号1=group(occupation)fegen 分组编号2=group(occupation),missingcodebook 分组编号1 分组编号2 //查看两个分组编号的信息

具体结果如下所示:

从结果看出,带有missing选项的fegen group命令运行结果比不带有missing选项的fegen group命令多了一组,而且没有缺失值,说明带有missing选项的fegen group命令将缺失值编成了一组。

3)对比带missing和不带missing选项的fegen group命令的运行速度

这里需要注意的一点是,使用或者不使用missing选项,fegen group命令的运行速度是有显著区别的。这里还是对occupation变量使用不同的方法分别来处理。具体代码如下所示:

*使用missing选项scalar sum=0 forv i = 1/5{ use tmp,clear timer clear 1 timer on 1 fegen 分组编号1=group(occupation),missing timer off 1 timer list 1 scalar sum=sum+r(t1)}scalar avg=sum/5 //运行时间均值di "使用missing选项,fegen命令耗费的时间为",avg*不使用missing选项scalar sum=0 forv i = 1/5{ use tmp,clear timer clear 1 timer on 1 fegen 分组编号1=group(occupation) timer off 1 timer list 1 scalar sum=sum+r(t1)}scalar avg=sum/5 //运行时间均值di "不使用missing选项,fegen命令耗费的时间为",avg

具体结果如下所示:

从结果看出,使用missing选项的fegen group命令运行速度明显慢于不使用missing选项的fegen group命令。小朋友,你是否有很多的问号?那接下来就探索它的原因。这里会使用到fegen group命令的另一个选项verbose来查看分组编码的具体信息。具体代码如下所示:

use tmp,clearfegen 分组编号1=group(occupation),verbosefegen 分组编号2=group(occupation),missing verbose

具体结果如下所示:

verbose所产生的详细信息来看,当fegen group命令不使用missing命令时,采用的方法是hash0也就是处理大数据集时采取的改进方法,但是当fegen group命令使用missing命令时,这里显示的方法是stata,也就是说没有采取改进方法,还是依旧是使用传统的stata处理方式来处理大数据集,所以速度是慢很多的。因此,当在大数据集中,使用fegen group命令时,尽量别使用missing选项。

至此,本文已经介绍完了fegen命令。虽然目前fegen命令支持的函数比较少,但是它的运行速度是令人惊喜的,在特定情况下能发挥奇效,并且由于fegen只是一个新开发的命令,相信以后会支持越来越多的函数,所以各位可以继续关注这个命令的发展。







对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
提升效率的利器——如何用labvarch批量修改变量标签
二进制序列类型——bytes()、bytearray()
今日头条海外疫情数据爬取
anythingtodate带你轻松处理日期
_variables介绍
查询12306车次信息
海外疫情仍严峻,劝君更在家中留
国外疫情怎么看?——实时新闻获真知

基于贝叶斯定理的算法——朴素贝叶斯分类

中国知网爬虫(CNKI) 批量下载PDF格式论文
sencode命令介绍
Ftools命令组之fisid命令和fsort命令介绍
“抽丝剥茧”,层层下分——机器学习基本算法之决策树

爬取东方财富网当日股票交易情况

stata调用python爬取时间数据——借他山之石以攻玉

全国31省GDP排行强势登场!
接力《发哨子的人》Stata版

关于我们



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

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


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

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