我有以下initial.dta
数据集:
obs. ID city salary
1 123 Normal 100
2 124 Paris 120
3 125 NY 130
4 122 .a 155
5 120 Paris 100
6 128 Chicago 150
................
city
和salary
的某些值可能会丢失(.a)。我需要计算每个可能的城市值的平均工资,并将其发布到不同的Stata .dta,以便新的Stata文件看起来像这样:
city averageSalary
Normal 120
Paris 110
NY 150
.a 108
Chicago 160
.................
我试过了:
clear
postfile myPost city averageIncome using target.dta
use initial, clear
sort city
by city: sum salary, meanonly
post myPost (`r(city)') (`r(mean)') // This line does not execute.
postclose myPost
这里有什么问题?请有人回答这个问题。或发表评论......
答案 0 :(得分:4)
根据How to retrieve data from multiple Stata files?
的回答,我想你是基于这个您的代码存在三个基本问题。
执行时
by city: sum salary, meanonly
Stata运行city
的不同值,但只有最后一个值的结果将保留在内存中。因此,尽管将显示您想要的结果,但大多数结果将不可用,并且此命令几乎无法用于您的目的。
您猜测发布时有一些名为r(city)
的内容可供您使用。那个猜测是错误的。请参阅summarize
的文档,了解之后内存中还有哪些内容可用。
您误解了post
的作用。实质上,您需要一次发布新结果文件的每一行(大小写,观察,记录),通常在循环内。你不能一次post
整套结果。
幸运的是,对于您和其他想要这样做的人来说,有一种更简单的方式来获得您想要的东西。
use initial, clear
collapse salary, by(city)
save target.dta
collapse
默认折叠为均值,但
collapse (mean) salary, by(city)
是更明确的语法。
另见Maarten Buis对此处引用的主题的回答(上面的链接)。如果需要,可以使用其他变量名称:请参阅collapse
的语法。