我们已经在前面两篇推文中,介绍了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元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~ 文字编辑:王 悦 技术总编:刘贝贝 |
|