处理collapse命令中的字符串变量

时间:2013-09-26 15:53:29

标签: collapse stata

编辑:我应该生成更好的数据。不一定是字符串变量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) 相同的解决方案?

2 个答案:

答案 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)