条件判断的两种简便方法
本文作者:张 宇
文字编辑:杨长青
技术总编:司海涛
好消息!!!爬虫俱乐部将于2019年7月5日至7月8日在武汉举行首期Python编程技术定制培训。本次培训采用理论与案例相结合的方式,旨在帮助零基础学员轻松入门Python,由浅入深学习和掌握Python爬虫技术,并明确未来更进一步的学习方向。
详细培训大纲及报名方式,请点击文末阅读原文呦~
在数据处理的过程中,我们经常用到条件判断语句。以auto数据为例:
clear
sysuse auto
tab mpg
要保留mpg为12,15,20,26,34,41的值,通常我们会通过下面一行程序实现:
keep if mpg == 12 | mpg == 15 | mpg == 20 | mpg == 26 | mpg == 34 | mpg == 41
此时有62个观测值被删除。
可以发现,这样一行程序非常繁琐,那么,还有别的方法可以实现这样的条件判断吗?
一、ifin命令
这个命令是外部命令,需要使用ssc install ifin进行安装。
ifin的基本语法如下:
ifin values, variable(varlist) [and] [omitif]
此命令可以生成一个用来选择多个值的if条件语句,并且将结果保存在局部宏s(ifin)中。主要选项如下:
【1】values代表要进行判断的目标值,在上面的例子中12到41这几个数字就是我们用到的values,目标值之间要用空格隔开。
【2】variable(varlist):此选项指定进行判断的变量。
【3】quote:将目标值加上双引号。
依据上述介绍,我们可以利用ifin生成一条判断语句,例如:
sysuse auto, clear
ifin 12 15 20 26 34 41, variable(mpg)
di "`s(ifin)'" //将结果作为字符串打印出来。
keep `s(ifin)'
结果如下:
局部宏s(ifin)中就存在这样一条if判断语句
同样有62条观测值被删除了。可以发现,ifin命令生成一条if语句,并将这条语句存储在局部宏s(ifin)中,使程序变得简洁。
如果我们要处理的变量是字符型变量,可以使用quote选项达到目的,例如:
sysuse auto, clear
tostring mpg , replace //为了演示,将数值型变量转成字符型。
ifin 12 15 20 26 34 41, variable(mpg) quote
di `"`s(ifin)'"'
keep `s(ifin)'
quote选项将目标值全部加上了双引号,方便我们对字符型变量进行处理。
二、inlist()函数
此函数的基本形式为:inlist(z,a,b,...)。如果第一个参数z出现在后边任意一个参数中,返回的值为1;否则返回的值为0。例如:
可以看到,第一个参数1没有出现在后边的参数中,返回0;1出现在了后边的参数中,返回1。
因此,我们同样可以利用此函数进行条件判断。将inlist()函数第一个参数传入变量名,后边的参数都是这个变量中的值。例如:
sysuse auto , clear
keep if inlist(mpg,12,15,20,26,34,41)
这一行程序意味着保留那些mpg等于12、15、…41的观测值。使用inlist()函数可以得到同样的结果:
以上就是简化判断语句的两种方法,希望对大家有所帮助。
对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!
往期推文推荐
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。