按字段排名观察,在等级后没有跳跃(Stata)

时间:2017-08-03 08:56:52

标签: stata rank

我需要在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

1 个答案:

答案 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

如果您依次运行命令并观察数据更改,您将了解命令的作用。