从连接字符串中删除尾随标点符号

时间:2014-06-12 15:22:52

标签: stata

我有几个字符串变量,我想在一个变量中变成逗号分隔的字符串。当egen concat使用punct(", ")选项时,如果条目中缺少关联的行,则会得到尾随逗号,这在我的数据中很常见。

我认为我可以使用regexm()和for循环删除尾随逗号,但我的连接字符串变量不会更改。

如何让这个REGEX在Stata中匹配? (或者我可能完全走错了路。)

clear
input str5 name1    str5 name2  str5 name3 
Tom     Dick    Harry
Tom     ""      ""
end
ds name*
local n: word count `r(varlist)'
display `n'
egen names = concat(name*), punct(", ")
generate names2 = names
forvalues i = 1/`n' {
    replace names2 = regexr(names2, ",.$", "")
}
list

这提供:

. list

     +-------------------------------------------------------------+
     | name1   name2   name3              names             names2 |
     |-------------------------------------------------------------|
  1. |   Tom    Dick   Harry   Tom, Dick, Harry   Tom, Dick, Harry |
  2. |   Tom                             Tom, ,             Tom, , |
     +-------------------------------------------------------------+

2 个答案:

答案 0 :(得分:2)

egen' concat()函数只实现了一个循环。你可以自己编写:

gen names = name1 

forval j = 2/4 { 
    replace names = cond(mi(names), name`j', names + "," + name`j') if !mi(name`j')
} 

答案 1 :(得分:1)

此类内容适用于您的数据吗?

clear

input str5 name1    str5 name2  str5 name3 str5 name4
Tom     Dick    Harry Hank
Tom     ""      ""  Hank
Tom     ""    Harry "" Hank
Tom     ""    "" ""
end  

list

egen names = concat(name*), punct(" ")
gen names2 = subinstr(itrim(names), " ", ", ", .)

list

如果您的字符串变量有空格,例如“汉克和格洛丽亚”,这将失败。