如何在Stata中聚合关系数据?

时间:2011-05-27 10:34:36

标签: aggregate stata

我无法解决以下Stata编程问题:

我有一张表格列出了客户购买的所有汽车并制作:

Customer | Make | Price
-----------------------
      c1 |   m1 |     1
      c1 |   m1 |     2
      c1 |   m3 |     1
      c2 |   m2 |     2
      c3 |    . |     .

我希望将其转换为每个客户一个观察/行的表格,列出每个品牌支付的最高价格:

Customer | m1 | m2 | m3
-----------------------
      c1 |  2 |  0 |  1
      c2 |  0 |  1 |  0
      c3 |  0 |  0 |  0

我如何实现这一目标?我知道reshape wide,但由于加倍c1 | m1行,这不起作用。此外,c3的缺失值也会造成麻烦。

1 个答案:

答案 0 :(得分:4)

根据你想做的事情,我建议稍微改变一下。例如,使用-bysort-您可以找到每个品牌的最高价格。

bysort Customer Make : egen maxPrice = max( Price )

或者,您可以使用折叠来查找客户的最高价格并制作:

collapse (max) Price, by( Customer Make )

但是,如果你真的想要使用-reshape发布的表格,你可以运行以下内容:

collapse (max) Price, by( Customer Make )
drop if Price == .
reshape wide Price, i( Customer ) j( Make ) string
renpfix Price 

请注意,如果在价格列中遇到缺失数据,则重塑将失败。我在上面的代码中删除了这些观察结果,但您可以选择执行不同的操作,例如在您发布的目标表中显示零替换丢失的数据。