Stata的。如何发布按排序的矩阵?或者如何返回矩阵的值?

时间:2013-05-28 21:51:41

标签: sorting group-by stata postfile

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

citysalary的某些值可能会丢失(.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    

这里有什么问题?请有人回答这个问题。或发表评论......

1 个答案:

答案 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的语法。