分享

论egen的花样用法(三)

 张春强2022 2017-08-26

我们已经在前面两篇推文中,介绍了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吧!

什么?!没看懂!!不要紧!!戳下面,听爬虫小将的详细讲解,也欢迎大家的批评指正哟!

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

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

                        文字编辑:王   悦

技术总编:刘贝贝



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多