首页 > 解决方案 > Stata:反向排序

问题描述

我有一个如下所示的数据集:

id varA  varB   varC
1   0     10    .
1   0     20    .
1   0     35    .
2   1     60    76
2   1     76    60 
2   0     32    .
         

我想创建一个 varC,它只为值 varA=1 反转 varB 的顺序,否则丢失。

标签: stata

解决方案


这可能会有所帮助:

clear 
input id varA  varB   varC
1   0     10    .
1   0     20    .
1   0     35    .
2   1     60    76
2   1     76    60 
2   0     32    .
end 

gen group = sum(id != id[_n-1] | varA != varA[_n-1])
sort group, stable 
by group: gen wanted = cond(varA == 1, varB[_N - _n + 1], .)

list id var* wanted, sepby(id varA) 

     +----------------------------------+
     | id   varA   varB   varC   wanted |
     |----------------------------------|
  1. |  1      0     10      .        . |
  2. |  1      0     20      .        . |
  3. |  1      0     35      .        . |
     |----------------------------------|
  4. |  2      1     60     76       76 |
  5. |  2      1     76     60       60 |
     |----------------------------------|
  6. |  2      0     32      .        . |
     +----------------------------------+

推荐阅读