我有几个字符串变量,我想在一个变量中变成逗号分隔的字符串。当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, , |
+-------------------------------------------------------------+
答案 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
如果您的字符串变量有空格,例如“汉克和格洛丽亚”,这将失败。