技术总编:刘洪儒
有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~
爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~
好消息:爬虫俱乐部隆重推出数据定制及处理业务啦,您有任何网页数据获取及处理方面的难题,请发邮件至我们邮箱statatraining@163.com,届时会有俱乐部高级会员为您排忧解难!
在数据处理过程中,我们有时想提取变量观测值中的某一部分。手工提取费事而且不能保证正确。今天小编给大家介绍相关的字符串函数:substr()函数、usubstr()函数、ustrleft()函数、ustrright()函数,用来快捷地提取字符串信息。
1.substr()函数的用法
语法:substr(s,n1,n2)
参数的具体含义:s为需要进行提取的字符串,n1表示提取的起始位置。对于不同编码的文本,n2代表不同含义。对于纯ASCII编码的文本,n2表示要提取字符长度为n2的字符串。而对于其他非ASCII编码的文本来说,n2表示要提取字节长度为n2的字符串。当然,对于那些纯ASCII编码的字符来说,上述两种说法是等价的。需要注意的是,所有utf-8编码中超出ASCII编码范围的字符都是两个字节以上。
注:其中上面提到的ASCII编码是基于拉丁字母形成,主要用于显示现代英语和其他西欧语言。ASCII编码使用指定的256种字符。其中前128个字符为标准的ASCII码,而后128个称为扩展ASCII码。所有的ASCII编码的字符都占一个字节。
我们通过具体的例子来看substr()函数的具体用法。
(1)dis substr("abcde",1,3) //英文字母为ASCII编码的字符,从“abcde”这个字符串的第一个字节开始,提取三个字符,即为“abc”

(2)dis substr("爬虫俱乐部",1,3) //汉字为utf-8编码中非ASCII编码的字符,一个汉字字符占三个字节,即从“爬虫俱乐部”这个字符串的第一个字节开始,提取三个字节的内容,输出结果为“爬”。

(3)当n1的取值为负整数时,意味着自后向前数从第|n1|个字节的位置开始提取字符信息。
dis substr("爬虫俱乐部",-6,3) //从倒数第6个字节开始,提取3个字节,即为“乐”

(4)当n2是.(缺失值)时,意味着字符串从第n1个字节开始提取到最后一个字节。
dis substr("abcde",3,.)

2.usubstr()函数的用法
语法:usubstr(s,n1,n2)
参数的具体含义:usubstr()函数的大部分用法与substr()函数相同。区别在于,usubstr()函数适用于所有unicode编码的字符串,而substr()函数在使用过程中需要区分字符串是否为ASCII编码。usubstr()函数中n1表示从第n1个字符开始提取,n2表示提取字符长度为n2的字符串。
具体用法如下所示。
dis usubstr("爬虫俱乐部",2,3) //对于“爬虫俱乐部”这一字符串,从第二个字符开始,提取3个字符,所以输出结果为“虫俱乐”。

3.ustrleft()函数和ustrright()函数的用法
(1)ustrleft()函数
语法:ustrleft(s,n)
参数的具体含义:s含义同usubstr()函数,n表示从字符串的最左边开始算起提取字符长度为n的字符串。其中n取值为正整数,s为所有unicode编码的字符。
我们通过例子来看ustrleft()函数的用法。
dis ustrleft("爬虫俱乐部",3) //从左边第一个字符开始,提取三个字符“爬虫俱”。

(2)ustrright()函数
语法:ustrright(s,n)
参数的具体含义:s含义同上,n表示从字符串的最右边开始算起提取字符长度为n的字符串。其中n的取值为正整数,s为所有unicode编码的字符。
具体用法如下面所示。
dis ustrright("爬虫俱乐部",3) //从最右边开始,提取三个字符——“俱乐部”。

以上是四个字符串函数的用法介绍,在实际数据处理中,我们怎么合理地运用它们呢?下面以一个日期数据为例,运用以上字符串函数提取相关信息。
我们生成一个日期数据如下:
clear
input str10 name str20 birth str20 start
"John" "1960/Jan/22" "1997/Mar/2"
"Mary" "1955/Jul/11" "1999/Jul/23"
"Kate" "1962/Nov/12" "2001/Nov/14"
"Mark" "1959/Jun/18" "1996/Jun/20"
end

(1)如果我们想要提取start变量中的年份,运行以下程序,结果如下图所示:
replace start = usubstr(start,1,4)

(2)如果我们想提取birth变量下的年、月、日信息,并将对应内容放到新变量中,操作如下:
gen year = real(ustrleft(birth,4)) //提取birth变量中前四个字符,利用 real()函数将字符型变量转换为数值型变量
gen month = substr(birth,6,3) //从birth变量中第6个字符开始提取3个字符的内容到新变量中
gen day = real(ustrright(birth,2)) //提取birth变量中最后两个字符

以上是4个字符串函数的简单应用,希望我们的介绍能给各位读者在处理数据时带来帮助。
对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!
往期推文推荐:
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


