假设我有如下数据:
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
这里有两种方法:
reshape
、sort
、reshape
使用
Stata Journal中的
rowsort
https://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 . . |
+----------------------------------------------------------------+