这个问题似乎应该可以通过几行简单的代码轻松完成,但我还没有找到解决方法:
我想采取这样的措施:
+---------------+
| 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 |
+-------------------------------+
然后可以折叠它而不会丢失与 each 相关联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 并且每个 var 有不同数量的 var 怎么办?我需要正确的代码(例如使用_n
?循环?)来自动识别列foreach
中的最高排名并为每个.var_rank
var
id
任何想法将不胜感激!