本文介绍了我如何在STATA中对组内的观察结果进行排名?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在Stata中有一些数据,它们看起来像下面的前两列:
group_id var_to_rank desired_rank
____________________________________
1 10 1
1 20 2
1 30 3
1 40 4
2 10 1
2 20 2
2 20 2
2 30 3
我想根据一个变量(Var_To_Ranch)为组(Group_Id)内的每个观测创建一个排名。为此,我通常使用:
gen id = _n
但是,我的一些观察结果(在我的小示例中,group_id=2)具有相同的排名变量值,此方法不起作用。
我也尝试过使用:
egen rank
带有不同选项的命令,但无法使我的排名变量看起来像Desired_RANK。
您能给我指出这个问题的解决方案吗?
推荐答案
我得说,为了更好地理解,这个问题问错了方向。这样做的目的是对观察结果进行分组,值最低的都被评为1级,其次最低的都被评为2级,以此类推。这并不是我见过的讨论过的大多数意义上的排名,但Stata的egen, rank()
确实让你在这条路上走了一段路。
但是,在这个帖子(start here)中引用的Statist帖子中提到的直接方法在精神上比引用的任何解决方案都要简单:
bysort group_id (var_to_rank): gen desired_rank = sum(var_to_rank != var_to_rank[_n-1])
在var_to_rank
上对数据进行排序后,如果每个不同值块的开始处的值与以前的值不同,则var_to_rank != var_to_rank[_n-1]
的结果为1;否则为0。将这些1和0累加得到所需的变量。前缀命令bysort
执行所需的排序,并确保这些操作在group_id
定义的组中单独完成。根本不需要egen
(许多只使用Stata的人偶尔会觉得这个命令很奇怪)。利益声明:引用的Statist帖子表明,当被问及类似的问题时,我也没有想到这个解决方案。
这篇关于我如何在STATA中对组内的观察结果进行排名?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!