查看原文
其他

超级简单的条件函数,轻松生成虚拟变量

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

本文作者:尚晨曦,河南大学经济学院

本文编辑:陈丹慧

技术总编:李婷婷

Python云端课程来啦!

      寒雪梅中尽,春风柳上归。新的一年,正值开学之际,为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!原价2400元的Python编程培训课程,现在仅需100元即可通过腾讯课堂参与学习。详细培训大纲及报名方式请查看推文Python云端课程福利大放送!0基础也能学~或点击文末阅读原文直接报名呦~另外,对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦!
导读

在实证回归中,我们经常需要加入虚拟变量,一般情况下可以通过xi、tabulate或者generatereplace组合等命令快速生成。在我们之前的推文《如何创建虚拟变量》中也有过详细的介绍。但是如果我们遇到的是如下几种情况呢?

情况一令省份中的北京,福建,广东,江苏,辽宁,山东,上海,天津,浙江为1,其余为0。

情况二:令数据中的1,3,5,7,8,13,14为1,其余为0。

情况三:令数据中大于等于3且小于等于5的值为1,其余为0。

对于这种没有规律的变量要摇身一变成虚拟变量,机智的你一定会想到用if命令来帮忙。

比如可以用下边的程序来实现以上三种情况中虚拟变量的创建:

*情况一gen east = 1 if 省份=="北京"|省份=="福建"|省份=="广东"|省份=="江苏"|省份=="辽宁"|省份=="山东"|省份=="上海"|省份=="天津"|省份=="浙江"replace east = 0 if east== .    *情况二gen dum = 1 if number==1|number==3|number==5|number==7|number==8|number==13|number==14replace dum = 0 if dum == .*情况三gen dum = 1 if 3<= number & number<=5replace dum = 0 if dum == .但是我们发现if的后缀非常长,容易出错,也不好检查

所以呢,小编今天给大家介绍三个Stata中超级简单好用的条件函数,不用if,分分钟生成虚拟变量

01inlist()函数

基本语法
inlist(z,a,b,c,...)
取值如果z=a,b,c,...中的任何一个,则取值为1;否则为0。
规则1、引用变量可以为实数或字符串。
2、若z为实数,则后续参数个数必须介于2-250;若z为字符,则后续参数的个数必须介于2-10。
3、inlist()函数还可以用&和
|连接。
接下来,我们来练习一下:
*第一步:生成一些模拟所需数据clear allinput A B str10 城市3 1 北京1 1 上海1 2 武汉1 3 杭州1 3 开封2 2 北京3 3 上海1 1 开封endsave E:\模拟数据.dta,replace  //先进行保存,后续还会使用*第二步:inlist()函数实操gen dum1 = inlist(A,1,2)     //如果变量A等于1或2,则dum1为1,否则dum1为0gen dum2 = inlist(B,1,3)     //如果变量B等于1或3,则dum2为1,否则dum2为0gen dum3 = inlist(A,1,2) & inlist(B,1,3) //如果变量A等于1或2,同时变量B等于1或3,则dum3为1,否则dum3为0gen dum4 = inlist(城市,"北京","上海")       //如果城市为北京或者上海,则dum4为1,否则dum4为0,提醒:字符串要加英文引号

运行结果如下:


02inrange()函数

基本语法
inrange(z,a,b)
取值果a<=z<=b,则取值为1,否则为0。
规则1、引用变量可以为实数或字符串值。
2、inrange(z,1,.)表示z取值从1到正无穷;inrange(z,.,.)表示z取值从负无穷到正无穷;inrange(z,.,1)表示z取值从负无穷到1。
同样,我们也练习一下:
*第一步:打开前文已保存的模拟数据use E:\模拟数据.dta,cleardrop B 城市*第二步:inrange()函数实操gen dum1 = inrange(A,1,2)   //如果变量A大于等于1且小于等于2,则dum1为1,否则dum1为0gen dum2 = inrange(A,1,.)   //如果变量A大于等于1,则dum2为1,否则dum2为0gen dum3 = inrange(A,.,2)   //如果变量A小于等于2,则dum3为1,否则dum3为0结果如下:


03cond()函数


基本语法cond(x,a,b[,c])
取值如果x为真,取值为a;如果x为假,取值为b;如果x为缺失值,取值为c。
规则1、引用变量可以为实数或字符串值。
2、若a为实数,b,c都要为实数;若a为字符串值,b,c都要为字符串值。
3、x不仅可以是个表达式,还可以是变量,甚至值。

最后一次练习:

*第一步:生成一些模拟所需数据clear allinput A3110.231  end*第二步:cond()函数实操gen dum1 = cond(A>2,1,0,.) //如果表达式A>2为真,则dum1为1,如果表达式A>2为假,则dum1为0,如果表达式A>2缺失,则dum1为.,提醒:当A为缺失值时,系统默认.>2,即表达式为真,则dum1为1gen dum2 = cond(A,1,0,.) //如果变量A不等于0,则dum2为1,如果变量A等于0,则dum2为0,如果变量A缺失,则dum2为.gen dum3 = cond(missing(A),.,cond(A>2,1,0)) //如果变量A缺失,则dum3为.,如果变量A没有缺失,则dum3为执行cond(A>2,1,0)的结果

结果如下:


以上就是三个条件函数的使用方法了,是不是很简单呀!

话不多说,我们直接使用条件函数来看一下对于文章开头提到的三种情况怎么创建虚拟变量更为方便呢。程序如下:

*情况一gen east=inlist(省份,"北京","福建","广东","江苏","辽宁","山东","上海","天津","浙江")*情况二gen dum=inlist(number,1,3,5,7,8,13,14)*情况三gen dum=inrange(number,3,5)

三行程序直接OK!

这个小捷径你学会了吗?你觉得条件函数还可以用在哪些场景呢?欢迎留言交流哦!

对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!

往期推文推荐

Python云端课程福利大放送!0基础也能学~

【爬虫实战】“我们,继续新故事”——爬取LOL英雄皮肤

“人像动漫化”—Python实现抖音特效

跨框架合并数据|frlink的用法,你get到了吗

《唐探3》做错了什么?|来自150万字影评的证据

爬虫俱乐部年度总结|《请回答2020》

春节假期临近,来爬爬豆瓣看看有什么好剧
putdocx生成Word文档so easy!

模糊匹配我只用这一招!

利用tushare获取财务数据

爬虫实战|Selenium爬取微信公众号标题与链接

轻轻一点,就知有没有|rqrs命令介绍

强大的正则表达式

自动群发邮件(二)——附带附件

自动群发邮件--email和smtplib基本模块的使用

批量处理变量名和标签的小方法

计算工作日的小能手——workdays

Seminar | 企业错报与银行贷款合同

Seminar | 共同基金行业的性别歧视
Seminar | 来自女儿的塑造:高管、女性社会化与企业社会责任

小贴士:Markdown的基本语法

听说相貌也能量化 | 调用百度人脸检测API实现颜值打分

列出指定属性的变量|findname命令比ds命令

新一代的标签转码小能手
【爬虫实战】亚马逊网站Top100畅销书爬取

Json文件好帮手——JsonPath

关于我们 


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



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

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

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

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