Ftools命令组之flevelsof命令介绍
本文作者:周宏杰
文字编辑:张馨月
导读
在往期推文《Ftools命令组之fisid命令和fsort命令介绍》和《Ftools命令组之fegen命令介绍》中,我们已经详细介绍了ftools的封装命令——fisid命令、fsort命令和fegen命令,本文中将继续介绍ftools的封装命令系列之一的flevelsof命令。
flevelsof命令
语法:flevelsof varname [if] [in] [,options]
flevelsof用来在大数据集中代替levelsof,主要作用有两个:第一,展示指定变量不同值;第二,当需要使用foreach循环时,可以使用该命令提取不同值作为循环范围。
为了展示flevelsof命令的效果,需要先生成一个大数据集。本文使用Stata自带数据集nlsw88.dta,重复生成该数据集50次之后,将这些数据纵向拼接起来得到一个大数据集tmp.dta,具体代码如下所示:
clear
forv i=1/50{
sysuse nlsw88,clear
save `i',replace
}
use 1,clear
forv i=2/50{
append using `i'
}
save "tmp",replace
接下来对tmp数据集中的industry变量使用flevelso命令,具体命令如下所示:
use tmp,clear
flevelsof industry
codebook industry
具体效果如下所示:
根据codebook结果中的unique values看出industry变量中有12不同的值,而flevelsof命令也提取出12个值,但是提取的却是12个整数,这并不是我们所希望的,我们希望提取出原本的字符内容。
首先,查看industry命令的类型,发现是标签数值类型,这也就说明了提取的结果是数值的原因,因为该变量中数字才是原本的值,而字符串是标签。因此,需要先将标签数值变量转成字符串变量,然后再使用flevelsof命令,具体命令如下所示:
decode industry, generate(industry1) //将标签数值变量industry转成字符串,生成变量industry1
flevelsof industry1
结果如下所示:
从上图中看出,提取出了我们希望得到的内容。
接下来对比levelsof命令查找指定变量中不同值的速度,展示flevelsof命令的运行速度,为了使对比结果有更好的可信度,这里对tmp.dta数据集中的industry1变量运行levelsof命令和flevelsof命令各五次,然后对所耗时间取均值。具体命令如下所示:
*使用flevelsof命令
scalar sum=0 //生成一个标量来存储5次运行程序所耗费的总共时间
forv i = 1/5{
use tmp,clear
decode industry, generate(industry1)
timer clear 1
timer on 1
flevelsof age
timer off 1
timer list 1
scalar sum=sum+r(t1)
}
scalar avg=sum/5 //运行时间均值
di "使用flevelsof命令耗费的时间为",avg
*使用levelsof命令
scalar sum=0
forv i = 1/5{
use tmp,clear
decode industry, generate(industry1)
timer clear 1
timer on 1
levelsof industry1
timer off 1
timer list 1
scalar sum=sum+r(t1)
}
scalar avg=sum/5
di "使用levelsof命令耗费的时间为",avg
具体结果如下图所示:
从上图可以看出,flevelsof命令的运行速度快于levelsof命令,但是由于数据量不大,所以差距并不明显。
该选项的效果主要是在展示字符串值时不带着双引号。在判断语句中需要判断前后是否一致的时候,有时字符内容是相同的,但是由于带着双引号,会被系统判断条件为假,此时需要使用该选项。具体命令如下所示:
use tmp,clear
decode industry, generate(industry1)
flevelsof industry1
flevelsof industry1,clean
具体结果如下所示:
如上图所示,使用clean选项去掉了结果的双引号。
默认情况下,flevelsof命令查找指定变量中不同值时不包含缺失值,但是使用了missing选项之后,会连缺失值一起找出来。具体命令如下所示:
use tmp,clear
decode industry, generate(industry1)
flevelsof industry1
flevelsof industry1,missing
具体结果如下所示:
如上图所示,带着missing选项的flevelsof命令比不带着missing选项的flevelsof命令多展示出了一个空字符串。
默认情况下展示flevelsof命令查找指定变量中不同值的结果时,不同值之间用空格隔开。使用了separate选项之后,可以选择指定的分隔符对结果进行分隔。具体命令如下所示:
use tmp,clear
decode industry, generate(industry1)
flevelsof industry1
flevelsof industry1,separate(.)
flevelsof industry1,separate(,)
具体结果如下所示:
从上图看出,使用不同分隔符,最后的展示效果不同。
至此,本文已经介绍完了flevelsof命令,相信大家对于它的用途有了一定的认识,赶快行动起来更新以前的命令吧!后续还会推出ftools系列命令,大家敬请期待。
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。