【问题标题】:Stata. How to post a matrix of by-sort? Or how to return values of a matrix?状态。如何发布按排序的矩阵?或者如何返回矩阵的值?
【发布时间】:2013-05-28 21:51:40
【问题描述】:

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

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

【问题讨论】:

    标签: sorting group-by stata postfile


    【解决方案1】:

    我想你是基于我对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 的语法。

    【讨论】:

    • 非常感谢。我按照您的建议将您的示例与 Maarten Buis 结合使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 2018-04-24
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多