编辑:我应该生成更好的数据。不一定是字符串变量destring
能够的情况。我只是在这里懒惰(我不知道如何生成随机字母)。
我有一个包含大量字符串的数据集,我希望collapse
,但似乎一般collapse
不能很好地放置字符串,尤其是(firstnm)
和{ {1}}。以下是一些类似的数据。
(count)
我希望clear
set obs 9
generate mark = .
replace mark = 1 in 1
replace mark = 2 in 6
generate name = ""
generate random = ""
local i = 0
foreach first in Tom Dick Harry {
foreach last in Smith Jones Jackson {
local ++i
replace name = "`first' `last'" in `i'
replace random = string(runiform())
}
}
使用“标记”,这对于collapse
和下标来说非常简单。
replace
但我的replace mark = mark[_n - 1] if missing(mark)
因collapse
错误而失败。
type mismatch
如果我使用collapse (firstnm) name (count) random, by(mark)
,则会清除第一个错误,但(first)
仍然失败。是否有解决方案可以避免额外的(count)
操作?
以下情况似乎有效,但对我的数据来说也会耗费更多时间。
by
或者是否有助于使用generate nonmissing_random = !missing(random)
egen nonmissing_random_count = count(nonmissing_random), by(mark)
collapse (first) name nonmissing_random_count, by(mark)
相同的解决方案?
答案 0 :(得分:2)
您可以使用destring random,replace
,然后执行以下工作:
collapse (first) name (count) random, by(mark)
mark name random
1 Tom Smith 5
2 Dick Jackson 4
但collapse (firstnm) name (count) random, by(mark)
仍然会产生不匹配错误。
答案 1 :(得分:1)
再考虑这一点,我的egen
count
by
操作不是必需的。我可以为非缺失/缺失的字符串变量生成1/0变量,然后在崩溃时使用(sum)
。
generate nonmissing_random = !missing(random)
collapse (first) name (sum) nonmissing_random, by(mark)