Stata 从连接的字符串中删除尾随标点
我有几个字符串变量,我想在一个变量中转换成逗号分隔的字符串。当我将Stata 从连接的字符串中删除尾随标点,stata,Stata,我有几个字符串变量,我想在一个变量中转换成逗号分隔的字符串。当我将egen-concat与punct(“,”选项一起使用时,如果条目中缺少相关行,则会得到尾随逗号,这在我的数据中很常见 我想我可以用regexm()和for循环删除尾随的逗号,但我的串联字符串变量没有改变 我如何让这个正则表达式在Stata匹配?(或者我完全走错了路。) 这规定: . list +-------------------------------------------------------------+
egen-concat
与punct(“,”
选项一起使用时,如果条目中缺少相关行,则会得到尾随逗号,这在我的数据中很常见
我想我可以用regexm()
和for循环删除尾随的逗号,但我的串联字符串变量没有改变
我如何让这个正则表达式在Stata匹配?(或者我完全走错了路。)
这规定:
. list
+-------------------------------------------------------------+
| name1 name2 name3 names names2 |
|-------------------------------------------------------------|
1. | Tom Dick Harry Tom, Dick, Harry Tom, Dick, Harry |
2. | Tom Tom, , Tom, , |
+-------------------------------------------------------------+
像这样的东西对你的数据有用吗
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
如果字符串变量有空格,例如“Hank和Gloria”,则将失败。
egen
的concat()
函数只实现一个循环。您可以自己编写:
gen names = name1
forval j = 2/4 {
replace names = cond(mi(names), name`j', names + "," + name`j') if !mi(name`j')
}
对于空格来说,这是失败的,但是我非常喜欢使用一个标点符号然后替换另一个标点符号(比如说
,然后替换,
)。有了这个设置,我需要对多个|
进行正则化。谢谢你的建议,但我认为尼克的基本解决方案是最好的。谢谢你,尼克。我想基本面总是赢的。我需要=
后面的第一个名称吗?
gen names = name1
forval j = 2/4 {
replace names = cond(mi(names), name`j', names + "," + name`j') if !mi(name`j')
}