查看原文
其他

论egen的花样用法(三)

徐露露 Stata and Python数据分析 2022-03-15

大大大大大新闻————自公众号推送视频讲解环节以来,深受广大读者朋友的喜爱。近日向我们提问的粉丝也是大幅增加呐!为了便捷管理相关信息,提高工作效率,我们对提问方式做了略微调整哟~提问者需点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~

我们已经在前面两篇推文中,介绍了egen与9个函数命令的搭配,在这一系列的最后一篇,小编给大家介绍最后几个搭配。

一、egen与ends

egen与ends搭配可以将一个字符串拆分开来:

sysuse auto,clear

keep make

egen name_1 = ends(make),punct(" ") head//以空格为分隔符,head表示将第一个分隔符前面的字符串提取出来

egen name_2 = ends(make), tail  //默认以空格为分隔符,tail表示将第一个分隔符后面的字符串提取出来

egen name_3 = ends(make), last  //默认以空格为分隔符,last表示将最后一个分隔符后面的字符串提取出来

list in 11/20

结果如下:

如果不设定punct(),则默认以空格为分隔符。此外,大家可以着重注意一下第十七行的内容”Chev. Monte Carlo”,因为它有两个空格,有助于大家的理解以上的程序。

二、egen与contact

egen与concat搭配时,可以将两个或多个变量以指定的字符连接起来,从而生成一个新的字符型变量。如果连接的变量是一个数值型变量,则它将会被转为字符型。对于数值型数据,还可以用format选项设定数据的显示格式,指定decode表示显示数值型数据的值标签。

sysuse auto,clear

keep price foreign

label list

在auto数据中,foreign是有值标签的数值型变量, 0表示Domestic,1表示Foreign。

gen price_p=concat(price foreign),punct("-")  //以"-"为连接符,默认为显示数据的值。

egen price_f=concat(price foreign),decode punct("-") format(%7.2f) //显示值标签,设定数值型变量的显示格式为保留两位小数

egen price_m=concat(price foreign),decode punct("-") format(%7.2f) maxlength(4) //限制标签显示的长度

list in 1/10

结果如下:

其中,punct(“-”)表示两个变量之间以“-”连接,若不设定,则两个变量直接相连;decode表示显示变量的值标签;format(%7.2f)设定变量price的显示格式为保留两位小数;maxlength()设定标签的最大显示长度。

三、egen与group

接下来,我们分别用gen与egen对变量进行分组,来查看二者之间有何区别:

webuse egenxmpl6, clear

keep sex race smokes

gen a=group(sex)  //赋值其中一个类别为1,另一个为缺失值,缺失值不参与分组分组

egen a_1=group(sex) //赋值其中一个类别为1,另一个为2,缺失值不参与分组

gen b=group(sex race)  //对sex race两个变量进行分组

可以看到, gen与group搭配,不能对sex race两个变量进行分组,这时候group就需要与egen结合使用了。

egen b=group(sex race)  //生成一个按race、sex分组的变量,默认情况下,缺失值不参与分组

egen b_1=group(race sex), missing  //缺失值参与分组

egen c=group(race sex smokes)  //对race sex smokes分组

list in 1/10

结果如下:

可以看到,如果用gen与group搭配来对sex分组,缺失值就和Female分到了一组,这并不是我们想要的结果,并且如果我们想要让缺失值也参与分组,这个搭配也不能满足我们的需求,此外,gen只能对一个变量进行分组,不能根据多个变量进行分组。而egen与group搭配,不仅可以对一个或多个变量分组,并且可以让缺失值也参与分组。

请注意,如果对多个变量进行分组,分组的顺序是按照变量的排列顺序。例如,变量b是按照sex、race进行分组,那么分组的顺序为:Female White 、Female Black、Male White、Male Black。变量b_1是按照race、sex进行分组,那么分组的顺序为:第一组:White Female ;第二组:White Male;第三组:Black Female;第四组:Black Male。也就是说变量的先后顺序不同,分组的顺序也是不相同的。

四、egen与group和gen与group的区别

上边我们已经提到group与gen和egen结合使用的区别,这里,我们再给大家指出它们在分组上的另一个不同点。

clear

set obs 20

gen A=1+int(15*uniform()) //随机生成1-15的随机观测值

sort A  //按照A的大小排序

gen a=group(4)  //按照A的总观测值个数来分组

egen a_1=cut(A),group(4)  //按照A的对应分位点来分组

egen p_1=pctile(A),p(25) //生成mpg的第25分位点的数值

egen p_2=pctile(A),p(50) //生成mpg的第50分位点的数值

egen p_3=pctile(A),p(75) //生成mpg的第75分位点的数值

egen p_4=max(A)  //生成A的最大观测值

list

结果如下:

请大家仔细观察输出结果,gen a=group(4)只是将20个观测值数分成了4组(如果之前不对变量A进行排序,则按照原始数据的排列进行分组),但是第十行和第十一行的相同观测值6分别被分到了第二组和第三组,这样的结果不是我们想要的,这个时候,我们就可以用egen的这个搭配了。它的分组原理是根据观测值的分位点进行的,由上图得,它20个变量分成了如下四组:[ 1,3), [ 3,6), [6,10.5), [10.5,14),这是一个左闭右开的范围。此时,我们再观察观测值“6”都被分到了第三组。这样就能很好地进行正确的分组了。

好啦,终于给大家介绍完了这么多与egen搭配的命令,是不是发现egen好用得不行?当你下次发现gen命令不能满足你的要求时,试试egen吧!

什么?!没看懂!!不要紧!!戳下面,听爬虫小将的详细讲解,也欢迎大家的批评指正哟!https://v.qq.com/txp/iframe/player.html?vid=g05375l85l3&width=500&height=375&auto=0

以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

                        文字编辑:王   悦

技术总编:刘贝贝



往期推文推荐:

1.高校学术大神:你的导师上榜了吗?

2.中国高校财经、管理与综合类期刊灌水排行榜

3.命令sum2docx输出统计量表到docx文件

4.用reg2docx报告你的实证结果吧!

5.爬虫俱乐部又出新命令了——wordconvert转换你的word文件

6.putdocx+wordconvert—将实证结果输出到Word(.docx)文档

7.Stata 15之Markdown——没有做不到,只有想不到!

8.矩阵和宏的故事

9.shellout,open anything

10.Putpdf--神奇的转换工具



关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

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

投稿邮箱:statatraining@163.com

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

欢迎关注爬虫俱乐部

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

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