我需要在Stata中生成一个排名变量。为此,我找到了函数
egen A = rank(B), field by (C)
适合。然而,问题在于B中存在相等的值。因此,该命令所做的是,对于具有相同值的那些,在A中给出相同的等级。 B中不等的下一个观察点不会得到下一个数字,但是跳出的步数与B中的相同观点一样多。在我的情况下,这种跳跃是不应该发生的。 小数据示例:
| B C A D|
1. | 6.5 1 1 1|
2. | 5.5 1 2 2|
3. | 5.5 1 2 2|
4. | 5.5 1 2 2|
5. | 2.5 1 5 3|
6. | 2.5 1 5 3|
7. | 1.5 1 7 4|
8. | 4.5 2 1 1|
9. | 3.5 2 2 2|
10. | 3.5 2 2 2|
11. | 2.5 2 4 3|
12. | 1.5 2 5 4|
13. | 1.5 2 5 4|
14. | 1.5 2 5 4|
15. | 1.5 2 5 4|
16. | 1 2 5 5|
上述命令给了我A,但我想得到D.任何人都有建议如何获得D?
数据:
input B C
1.5 1
2.5 1
2.5 1
5.5 1
5.5 1
5.5 1
6.5 1
1.5 2
1.5 2
1.5 2
1.5 2
2.5 2
3.5 2
3.5 2
4.5 2
end
答案 0 :(得分:-1)
clear
input B C
1.5 1
2.5 1
2.5 1
5.5 1
5.5 1
5.5 1
6.5 1
1.5 2
1.5 2
1.5 2
1.5 2
2.5 2
3.5 2
3.5 2
4.5 2
end
sort C B
by C: gen D = cond(_n == 1 | (C[_n-1]== C & B[_n-1] != B), 1, 0)
by C: replace D = D[_n-1]+D if _n > 1
说明:
“cond”函数将值1分配给变量D,如果它是组中的第一个记录(通过C)或者如果C等于前一个记录的C并且B不等于前一个记录的B.否则,变量D被赋值为0。
“replace”命令将前一记录的D值添加到实际记录的D值。 “通过C:”使计数重新开始,每次新的C值为1
如果您依次运行命令并观察数据更改,您将了解命令的作用。