2

我无法解决以下 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会造成麻烦。

4

1 回答 1

4

根据您想要做的事情,我建议以不同的方式处理这个问题。例如,使用 -bysort- 您可以按客户查找每个品牌的最高价格。

bysort Customer Make : egen maxPrice = max( Price )

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

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 

请注意,如果在 Price 列中遇到缺失数据,reshape 将失败。我在上面的代码中删除了这些观察结果,但您可以选择做一些不同的事情,例如用零替换丢失的数据,就像您在发布的目标表中显示的那样。

于 2011-05-27T17:07:20.733 回答