我无法解决以下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
的缺失值也会造成麻烦。
答案 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
请注意,如果在价格列中遇到缺失数据,则重塑将失败。我在上面的代码中删除了这些观察结果,但您可以选择执行不同的操作,例如在您发布的目标表中显示零替换丢失的数据。