文字编辑:李朋冲

技术总编:刘洪儒

在数据处理过程中,我们有时想提取变量观测值中的某一部分。手工提取费事而且不能保证正确。今天小编给大家介绍相关的字符串函数: substr()函数、usubstr()函数、ustrleft()函数、ustrright()函数 ,用来快捷地提取字符串信息。

1.substr() 函数的用法

语法: substr(s,n1,n2)

参数的具体含义: s 为需要进行提取的字符串, n1 表示提取的起始位置。对于不同编码的文本, n2 代表不同含义。对于纯 A SCII 编码的文本, n2 表示要提取字符长度为 n2 的字符串。而对于其他非 ASCII 编码的文本来说, n2 表示要提取字节长度为 n2 的字符串。当然,对于那些纯 A SCII 编码的字符来说,上述两种说法是等价的。需要注意的是,所有 utf-8 编码中超出 A SCII 编码范围的字符都是两个字节以上。

注:其中上面提到的 ASCII 编码是基于拉丁字母形成,主要用于显示现代英语和其他西欧语言。 ASCII 编码使用指定的 256 种字符。其中前 128 个字符为标准的 A SCII 码,而后 128 个称为扩展 A SCII 码。所有的 ASCII 编码的字符都占一个字节。

我们通过具体的例子来看 substr() 函数的具体用法。

(1) dis substr("abcde",1,3) // 英文字母为 A SCII 编码的字符,从 “abcde” 这个字符串的第一个字节开始,提取三个字符,即为 “abc”

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

(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) //从最右边开始,提取三个字符—— 俱乐部 ”。

以上是四个字符串函数的用法介绍,在实际数据处理中,我们怎么合理地运用它们呢?下面以一个日期数据为例,运用以上字符串函数提取相关信息。

我们生成一个日期数据如下:

clearinput 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"

(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命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

投稿要求:

1)必须原创,禁止抄袭;

2)必须准确,详细,有例子,有截图;

注意事项:

1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。

3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。 返回搜狐,查看更多

责任编辑:

声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。