在Stata中,如何根据组中最大数量的唯一值创建新变量,并按组替换值

时间:2013-09-09 20:18:33

标签: variables stata

这个问题似乎应该是一些可以轻松完成的事情 直截了当的代码行,但我还没有找到办法:

我想采取这样的方式:

 +---------------+
 | id        var |
 |               |
 |  1        112 |
 |  1        113 |
 |  2        221 |
 |  2        222 |
 |  3        331 |
 |---------------|
 |  3        332 |
 |  3        333 |
 +---------------+

并将其纳入此内容:

 +-------------------------------+
 | id   var   var1   var2   var3 |
 |-------------------------------|
 |  1   112    112      .      . |
 |  1   113      .    113      . |
 |  2   221    221      .      . |
 |  2   222      .    222      . |
 |  3   331    331      .      . |
 |-------------------------------|
 |  3   332      .    332      . |
 |  3   333      .      .    333 |
 +-------------------------------+

然后可以id折叠,而不会丢失与var相关联的id的唯一值。

 +-------------------------+
 | id   var1   var2   var3 |
 |-------------------------|
 |  1    112    113      . |
 |  2    221    222      . |
 |  3    331    332    333 |
 +-------------------------+

我可以这样做:

bysort id: egen id_rank = rank(var)
tabulate var_rank                       /// identify highest rank
by id, sort : gen var1 = var if var_rank == 1
by id, sort : gen var2 = var if var_rank == 2
by id, sort : gen var3 = var if var_rank == 3

但是如果我为每个id(我这样做)拥有超过3个变量并且每个变量的var数量不同呢?我需要正确的代码(例如使用_nforeach循环?)来自动识别var_rank列中的最高排名,并为每个{填写现有var值{1}}。

任何想法都将不胜感激!!

1 个答案:

答案 0 :(得分:2)

这两行应该从你的演示输入到你的演示输出:

bysort id: gen j = _n
reshape wide var, i(id) j(j)

reshape是一个令人困惑但非常强大的命令,它绝对值得学习使用它,而不是疯狂地手动重塑数据集。