1

我有以下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    

这里有什么问题?拜托,有人回答这个问题。或者发表评论...

4

1 回答 1

4

我想,您是基于我对如何从多个 Stata 文件中检索数据的回答?

您的代码存在三个基本问题。

  • 当你执行

    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.

于 2013-05-29T05:21:07.700 回答