如何根据值的排序顺序重新创建变量

问题描述 投票:0回答:1

假设我有如下数据:

clear all
input age1 age2 age3 age4 
15 10 4 2
2 5 6 8
8 0 6 .
2 2 4 9
9 9 1 .
2 5 . .
end

有四个变量,所有变量都不需要有值。观测值可以具有具有相同值(关系)的变量。问题是我希望对它们进行排序,使得

age1
包含最高值,
age2
包含第二高值,依此类推。

我怎样才能做到这一点?这是我希望新变量的样子:

clear all
input age1a age2a age3a age4a
15 10 4 2
8 6 5 2
8 6 0 .
9 4 2 2
9 9 1 .
5 2 . .
end

这将使我能够实现计算最高年龄和第二高年龄之间的距离的目标:

gen space1_2 = age1a - age2a

结果:

space1_2
5
2
2
5
0
3
variables stata
1个回答
0
投票

这里有两种方法:

  1. reshape
    sort
    reshape

  2. 使用

    Stata Journal
    中的rowsorthttps://journals.sagepub.com/doi/pdf/10.1177/1536867X0900900107

clear all
input age1 age2 age3 age4 
15 10 4 2
2 5 6 8
8 0 6 .
2 2 4 9
9 9 1 .
2 5 . .
end

gen id = _n 
reshape long age, i(id) j(which)
gsort id -age 
by id: replace which = _n 
reshape wide age, i(id) j(which)
list, sep(0)
clear all
input age1 age2 age3 age4 
15 10 4 2
2 5 6 8
8 0 6 .
2 2 4 9
9 9 1 .
2 5 . .
end


rowsort age?, gen(sage1-sage4) descending highmissing 
list, sep(0)

     +----------------------------------------------------------------+
     | id   age1   age2   age3   age4   sage1   sage2   sage3   sage4 |
     |----------------------------------------------------------------|
  1. |  1     15     10      4      2      15      10       4       2 |
  2. |  2      8      6      5      2       8       6       5       2 |
  3. |  3      8      6      0      .       8       6       0       . |
  4. |  4      9      4      2      2       9       4       2       2 |
  5. |  5      9      9      1      .       9       9       1       . |
  6. |  6      5      2      .      .       5       2       .       . |
     +----------------------------------------------------------------+
© www.soinside.com 2019 - 2024. All rights reserved.