放大招!新命令addbefore来了~

2017-12-05 王悦 爬虫俱乐部 爬虫俱乐部




    有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~

ps:(1)喜大普奔,爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~

(2)爬虫俱乐部将于2018年1月20日至28日在武汉举行两期Stata编程技术定制培训。详情请戳《爬虫俱乐部Stata编程技术定制培训班——2018年1月武汉专场


~~我们爬虫俱乐部又双叒叕推出新命令啦~~大家进行数据处理的时候一定会遇到在某个变量前补数字或字符串,比如:当股票代码不足6位时,在其前边补0至6位。贴心的爬虫君编写的新命令addbefore可以让大家偷个懒~再也不需要手动加0啦~

语法结构介绍

按照老规矩,首先你需要安装该命令:ssc install addbefore,它在Stata13及更高版本中均可以使用哦。再通过help addbefore查看一下它的语法。

我们可以看到,addbefore不 仅可以在一个变量前加指定的数字或者字符,还可以设定整个变量的“长度”(在Stata13及之前版本,“长度”是指变量的字节长度,在Stata14、 Stata15中指的是unicode字符的个数)。它设置了四个选项,分别是generate()、replace、digits()和char()。

(1)generate():生成新的变量,并在新生成的变量下进行修改,原始变量不发生变化。需要注意的是这里生成的新变量个数需要和原始变量个数一致,否则Stata将会出现如下报错:

    (2)replace:覆盖原始变量,即直接在原始变量上进行修改。但是generate()和replace只能使用其中一个哦。

    (3)digits():在Stata13及之前的版本中使用该选项指定字节长度,在Stata14及15中是用来指定 unicode字符的个数,最大不能超过10。

     (4)char():用于指定加在变量前的字符或者数字的具体值,长度必须为1,默认值为0。对于Stata13及之前的版本,该选项不得指定汉字, Stata14及Stata15版本,变量前可以补汉字。

例子说明

接下来我们通过一个例子来进一步感受addbefore的作用吧,输入如下命令:

clear

set more off

input str15 v1 v2 v3 str15 v4  //生成v1 v2 v3 v4四个变量,其中v1 v4为字符型变量

a 1 22 a

dd2 56555 666 dd2

2 22 55 2

65 66 228 65

889 22 33 889

525 55 889 525

end

addbefore v1 v2 v3 v4 , digits(7) gen(v5 v6 v7 v8)  //指定变量的长度为7,没有指定char()选项,默认值在变量前补0。

结果如下图:

可以看到这里新生成了四个变量,每个变量值的字符长度都是7,不足7位的前边补充0。

addbefore v2 v3 , d(7) c(1) replace  //使用数字1对变量v2 v3进行填充至7位。

结果如下图:

直接覆盖变量v2 v3进行补充,不足7位的用1在变量前进行填充。

addbefore v1 v4 , d(7) c(a) replace  //使用字母a对变量v1 v4进行填充

结果如下图:

直接覆盖变量v1、v4进行补充,不足7位的用字符“a”在变量前进行填充。

在Stata14或者15的版本中,还可以使用汉字进行填充。

addbefore v1 v4 , d(7) c(夫) replace  //使用汉字夫对变量v1 v4进行填充

结果如下图:

实战演练-补全股票代码

众所周知中国股票市场(港股除外)中的股票代码是由六位数字组成的,但是有时候我们见到的股票代码却不足6位,这时候往往我们需要将其补全至6位。当然方法有很多,先来生成一组股票代码的数据:

clear

set more off

input stkcd str6 stkcd1

1 1

2 2

761 761

2240 2240

end

上边两组股票代码,一个为字符型数据,一个为数值型数据,现在需要将其补全至6位。

1.当股票为数值型:

(1)format stkcd %06.0f //补全后还为数值型

(2)tostring stkcd,format(%06.0f) replace  //补全后变为字符型

(3)gen stkcd2=string(stkcd,"%06.0f") //补全后变为字符型

这里给出三种方法,读者可自行尝试,这里不再详细介绍。

2.当股票代码为字符型时:

(1)现利用destring stkcd,replace将数据变为数值型,再利用上述3种方法。

(2)循环1:

       forvalues i = 1/6 {

              qui replace stkcd1 = "0" + stkcd1 if ustrlen(stkcd1) < 6

       }

(3) 循环2:我们还可以将股票代码放入宏中,然后进行循环。这个方法往往出现在网络爬虫的时候,网页链接里边有股票代码,且都为6位。在对股票代码进行循环的 时候,一般通过levelsof将股票代码放入局部宏中,但数据中的股票代码不足6位,这个时候就需要先通过以下循环,将股票代码补足6位,程序如下:

while length("`stkcd'")<6 {

        cap local c= "0"+"`stkcd'"

       }  

       3.addbefore

addbefore stkcd stkcd1,d(6) replace

简短的一行命令就完成了对stkcd、stkcd1的填补,每一个股票代码前都用0补足了6位,不用管是字符型还是数值型,也不需要利用复杂的循环去解决,对,只需ssc install addbefore

小结

addbefore是一个小而有用的命令。就如你看到的将股票代码补足6位,其本身就是一个非常简单的问题,语法也不难,更不需要用很长的程序去实现。但是你需要区分数据为数值型还是字符型,如果是字符型那么你可能还需要用一个循环去实现,使用addbefore的 最大方便之处不在于程序变简洁了,而在于你不用去考虑多种情况,遇到这种类似的问题,你只需要设定两个选项:(1)变量前补什么?(2)补充至多少位?一 行简单的命令,可以同时完成对多个变量的填补,甚至这些变量可以为不同的类型(这里需要注意,当同时填充字符型和数值型的时候,用来补充的值不能为字符, 只能为数字)。是不是很方便呢?请继续关注爬虫俱乐部,我们会努力推出更多实用简介的命令!

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

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

文字编辑/高金凤

技术总编/刘贝贝


往期推文推荐:

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

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

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

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

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

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

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

8.矩阵和宏的故事

9.shelloutopen anything

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



关于我们

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

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

投稿邮箱:statatraining@163.com

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

欢迎关注爬虫俱乐部

微信扫一扫
关注该公众号

公开收集正在保存拖拽至此处以完成收集私密