技术编辑:张继宝
介绍
在之前的推文和文章中,我们已经详细介绍了封装命令——fisid命令、fsort命令和fegen命令。 本文将继续介绍封装命令系列命令之一。
命令
语法:[if] [in] [,]
用于在大数据集中进行替换,它主要有两个作用:一是显示指定变量的不同值;二是显示指定变量的不同值。 其次,当需要使用循环时,可以使用该命令提取不同的值作为循环范围。
为了演示命令的效果,首先需要生成一个大的数据集。 本文使用Stata自带的数据集.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
(1)命令效果显示
接下来,对 tmp 数据集中的变量使用该命令。 具体命令如下:
use tmp,clear
flevelsof industry
codebook industry
具体效果如下:
根据结果我们可以看到变量中有12个不同的值,命令也提取了12个值,但是它提取了12个整数。 这不是我们想要的。 我们希望能够提取出原始的人物内容。
首先检查命令的类型,发现是标签值类型。 这也解释了为什么提取的结果是数值,因为变量中的数字是原始值,而字符串是标签。 因此,需要先将标签数值变量转换为字符串变量,然后再使用该命令。 具体命令如下:
decode industry, generate(industry1) //将标签数值变量industry转成字符串,生成变量industry1
flevelsof industry1
结果如下:
从上图可以看出,我们希望得到的内容就被提取出来了。
(2)命令与命令运行速度对比
接下来,比较命令的速度,找到指定变量中不同的值,以显示命令的运行速度。 为了让比较结果更加可信,这里我们对tmp.dta数据集中的变量分别运行命令和命令五次,然后对所花费的时间进行平均。 具体命令如下:
*使用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
具体结果如下图所示:
从上图可以看出,命令运行速度比命令快,但由于数据量不大,所以差别并不明显。
(3) 显示clean选项的效果
该选项的主要作用是显示不带双引号的字符串值。 当一个判断语句中需要判断前后字符是否一致时,有时字符内容相同,但由于双引号的存在,系统会判断条件为假。 在这种情况下,您需要使用此选项。 具体命令如下:
use tmp,clear
decode industry, generate(industry1)
flevelsof industry1
flevelsof industry1,clean
具体结果如下:
如上图所示,使用 clean 选项删除结果中的双引号。
(4) 显示选项效果
默认情况下,该命令在指定变量中查找不同值时不包括缺失值,但使用该选项后,缺失值会一起查找。 具体命令如下:
use tmp,clear
decode industry, generate(industry1)
flevelsof industry1
flevelsof industry1,missing
具体结果如下:
如上图所示,带选项的命令比不带选项的命令多显示一个空字符串。
(5) 显示选项效果
默认情况下,当命令显示在指定变量中查找不同值的结果时,不同值之间用空格分隔。 使用该选项后,您可以选择指定的分隔符来分隔结果。 具体命令如下:
use tmp,clear
decode industry, generate(industry1)
flevelsof industry1
flevelsof industry1,separate(.)
flevelsof industry1,separate(,)
具体结果如下:
从上图可以看出,使用不同的分隔符会导致最终的显示效果不同。
至此,本文已经介绍了该命令。 相信大家对其用途都有一定的了解。 赶紧更新之前的命令吧! 后续还将推出一系列命令,敬请期待。
如果我们的推文累计奖励超过1000元,我们将为您开具发票,发票类别为“咨询费”。 努力工作,不辜负您的支持!
过去各期的推荐推文
关于我们
微信公众号“Stata与数据分析”分享stata等软件的实用数据处理知识。 欢迎转载和打赏。 我们是在李春涛教授的带领下,由研究生和本科生组成的大数据处理与分析团队。
另外,欢迎大家贡献和介绍一些关于stata和.的数据处理和分析技巧。
提交邮箱:
提交要求:
1)必须原创,禁止抄袭;
2)必须准确、详细,并附有示例和截图;
防范措施:
1)所有提交的作品将由公众号运营团队成员审核。 审核通过者方可录用。 一旦被接受,作者将在推文中签名并获得一部分赏金。
2)请在邮件中注明您的贡献,邮件名称应为“投稿+推文名称”。
3)应读者要求,现提供付费问答服务。 如果您遇到数据处理、分析等问题,可以在公众号中提问。 您只需支付少量赏金,我们将在后续推文中予以答复。