Stata:字符串函数
我们在做数据清理时经常会遇到字符型变量的清理问题,Stata提供了大量、功能强大的字符函数,灵活运用字符函数可以高效、快速、精确、准确地清理数据。本文为大家介绍一些常用的Stata 字符函数。其中s 代表字符集,包括字符串、字符型变量或者其他字符表达式,n 代表数值子表达式,包括数字、字符型变量或者其他数值表达式。
1. 字符串的缩写与扩展
abbrev(s,n):适用于所有字符型变量,功能是对s进行缩写,缩写的长度为n,n的取值范围为5-32。
示例:
abbrev("displacement", 8) = “displa~t”
abbrev("北京市海淀区", 8) = “北京~区”
strcat(s1,s2):合并s1、s2。Stata里没有strcat()函数,用加号实现字符之间的连接。
示例:
"hello" + "world" = "hello world"
"a"+ "b" = "ab"
"北京市 " + "海淀区" = "北京市海淀区"
strdup(s1,n):创建n个s1的副本并合并。Stata里没有strdup()函数,用乘号实现字符的多次复制。
示例:
"hello"* 3 = "hellohellohello"
0 * "hello" = ""
"北京市"* 2 = "北京市北京市"
2. 字符串的截取
substr(s,n1,n2):从s中第n1个字符开始截取n2个字符。如果n2缺失,则从第n1个字符开始截取所有字符。如果n1<0,则从s字符的倒数第n1个字符处开始截取。
示例:
substr("abcdef",2,3) = "bcd"
substr("abcdef",-3,2) ="de"
substr("abcdef",2,.) = "bcdef"
substr("abcdef",-3,.) ="def"
usubstr(s,n1,n2):从s中第n1个字符开始截取n2个字符。如果n2缺失,则从第n1个字符开始截取所有字符。如果n1<0,则从s的倒数第n1个字符处开始截取。适用于Unicode编码。
示例:
usubstr("北京市海淀区",4,3) = "海淀区"
usubstr("北京市海淀区",-3,3) = "海淀区"
usubstr("北京市海淀区",4,.) = "海淀区"
ustrleft(s,n):截取s的前n个字符。适用于Unicode编码。
示例:
ustrleft("北京市海淀区",3) = "北京市"
ustrright(s,n):从s的结尾处开始截取n个字符。适用于Unicode编码。
示例:
ustrright("北京市海淀区",3) = "海淀区"
word(s,n):截取s中第n个单词。当n是缺失时,截取的结果也是缺失。当n>0时,从字符s左边开始截取;当n<0时,从字符右边开始截取。
示例:
word(“thisis a happy day”, 2) = "is"
word(“this is a happy day”, .) = ""
word(“北京市, 3) = "市"
word(“北京市, 3) = "
3. 字符串的替换
plural(n,s):可以将s变为复数。当n的取值不是+/-1,plural就给s添加后缀“s”。
示例:
plural(1,"horse") = "horse"
plural(2, "") = "horses"
plural(n,s1,s2):可以给s1添加删减后缀。当n的取值不为+/-1时,如果s2前有“+”,添加s2至s1后面;若s2前有“-”,在s1中去掉s2;如果s2前没有“+/-”,s2替换s1。
示例:
plural(2,"glass", "+es") = "glasses"
plural(2, "abcdefg","-efg") = "abcd"
plural(2, "mouse","mice") = "mice"
plural(1, "mouse","mice") = "mouse"
plural(2, "北京市", "+海淀区") = "北京市海淀区"
plural(2, "北京市海淀区","-海淀区") = "北京市"
regexr(s1,re,s2):判断s1中是否有符合re表达式的字符,如果有,用s2替换s1中满足re条件的第一个字符串,否则,返回s1。适用于ASCII编码。
示例:
regexr(“小明是学生”,”小”,”大”) = ”大明是学生”
regexr(“小明是小学生”, ”小”,”大”) = ”大明是小学生”
regexr(“大明是学生”, ”小”,”大”) = ”大明是学生”
ustrregexrf(s1,re,s2[,noc]):用法同regexr,增加选项noc。如果不指定noc非0,就不区分大小写。适用于Unicode编码。
示例:
ustrregexrf("this is", "is", "X") = "thX is"
ustrregexrf("THIS is ", " Is","X") = " THIS is"
ustrregexrf("THIS is ", " Is","X", 1) = "THX is"
ustrregexra(s1,re,s2[,noc]):用s2替换s1中符合re表达式的所有字符。当指定选项noc不为0时,不区分大小写。适用于Unicode编码。
示例:
ustrregexra("this is", "is", "X") ="thX X"
ustrregexra("THIS is","Is", "X") = " THIS is"
ustrregexra("THIS is", "Is","X", 1) = "THX X"
subinstr(s1,s2,s3,n):将s1中前n次出现的s2替换成s3。如果指定n为缺失“.”,则s1中所有的s2字符全部被替换成s3。
示例:
subinstr("thisis the day","is","X",1) = "thX is the day"
subinstr("this is the hour","is","X",2) ="thX X the hour"
subinstr("this isthis","is","X",.) = "thX X thX"
usubinstr(s1,s2,s3,n):将s1中前n次出现的s2替换成s3。如果指定n为缺失“.”,则s1中所有的s2全部被替换成s3。适用于Unicode编码。
示例:
subinstr("北京市海淀区海淀路","海淀","朝阳",1) = "北京市朝阳区海淀路"
subinstr("北京市海淀区海淀路","海淀","朝阳",.) = "北京市朝阳区朝阳路"
subinword(s1,s2,s3,n):将s1中前n次出现的单词s2替换成s3。如果指定n为缺失“.”,则s1中所有的单词s2全部被替换成s3。
示例:
subinword("thisis the day","is","X",1) = "this X the day"
subinword("this is thehour","is","X",.) = "this X the hour"
subinword("this isthis","th","X",.) = "this is this"
4. 删除字符串中的空格
stritrim(s):将s中字符之间的连续多个空格删除至一个空格。无法去掉s字符串开头处和结尾处的空格。
示例:
stritrim("hello there") ="hello there"
stritrim("北京市 海淀区") = "北京市海淀区"
strltrim(s): 去掉s开头处的空格。
示例:
strltrim(" this") = "this"
strltrim(" 北京市") ="北京市"
strrtrim(s):去掉s结尾处的空格。
示例:
strrtrim("this") = "this"
strrtrim("北京市 ") = "北京市"
strtrim(s):去掉s开头处和结尾处的空格。
示例:
strtrim(" this ") = "this"
strtrim(" 北京市 ") = "北京市"
5. 字符型与数值型的转换
real(s):将s转换为数字或者缺失。
示例:
real("5.2")+1 = 6.2
real("hello") = .
real("北京市") = .
strofreal(n):将数值n转为字符。
示例:
strofreal(4)+"F" = "4F"
strofreal(1234567) = "1234567"
strofreal(12345678) = "1.23e+07"
strofreal(.) = "."
strofreal(n,s):将数值n按照s规定的显示格式显示。
示例:
strofreal(4,"%9.2f") = "4.00"
strofreal(123456789,"%13.0gc") = "123,456,789"
strofreal(0,"%td") = "01jan1960"
strofreal(225,"not a format") = ""