4

Stataには、次の最初の2列のようなデータがあります。

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

1つの変数(var_to_rank)に従って、グループ(group_id)内の各観測値のランクを作成したいと思います。通常、この目的のために私は使用しました:

gen id = _n

ただし、私の観測の一部(私の小さな例ではgroup_id = 2)は、ランキング変数の値が同じであり、このアプローチは機能しません。

私も使用してみました:

egen rank

さまざまなオプションを使用したコマンドですが、ランク変数をdesired_rankのように見せることはできません。

この問題の解決策を教えていただけますか?

4

6 に答える 6

7

以下は私のために働きます:

bysort group_id: egen desired_rank=rank(var_to_rank)

ここに画像の説明を入力してください

于 2011-05-18T11:40:15.377 に答える
5

スタタリストでそのような解決策に出くわしました:

bysort group_id (var_to_rank) : gen rank = var_to_rank != var_to_rank[_n-1]
by group_id : replace rank = sum(rank)

この問題を解決するようです。

于 2011-05-18T13:41:19.027 に答える
5

この質問は、理解を深めるために間違った方法で提起されていると思います。目的は、観測値をグループ化することです。最も低い値を持つものにはすべてグレード 1 が割り当てられ、次に低いものにはすべてグレード 2 が割り当てられます。これは、私が議論したほとんどの意味でのランキングではありませんが、Stata のランキングはegen, rank()あなたをその一部にします。

しかし、このスレッドのどこかで引用されている Statalist スレッド (ここから開始) で言及されている直接的な方法は、引用されているどのソリューションよりも精神的に単純です。

bysort group_id (var_to_rank): gen desired_rank = sum(var_to_rank != var_to_rank[_n-1]) 

データが並べ替えられるとvar_to_rank、個別の値の各ブロックの先頭で値が前の値と異なる場合、値 1 が の結果になりvar_to_rank != var_to_rank[_n-1]ます。それ以外の場合、結果は 0 です。これらの 1 と 0 を合計すると、目的の変数が得られます。プレフィックス コマンドbysortは、必要な並べ替えを行い、これが によって定義されたグループ内ですべて個別に行われるようにしgroup_idます。まったく必要ありませんegen(Stata しか使用しない多くの人が時々奇妙に感じるコマンドです)。

関心の宣言: 引用された統計学者のスレッドは、同様の質問をされたとき、私もこの解決策を 1 つに考えていなかったことを示しています。

于 2013-01-05T13:00:49.083 に答える
3

@radek:あなたは確かにそれをその間に整理しました...しかしこれは簡単な(あまりエレガントではありませんが)解決策だったでしょう:

bysort group_id:   egen desired_rank_HELP =rank(var_to_rank), field
egen desired_rank      =group(grup_id desired_rank_HELP)
drop desired_rank_HELP
于 2013-01-04T20:42:53.730 に答える
0

このコマンドを試してください、それは私にとってとてもうまくいきます:egen newid=group(oldid)

于 2014-01-14T07:57:09.043 に答える
0

仕事が多すぎる。簡単でエレガント。これを試してみてください。

gen desired_rank=int(var_to_rank/10)

于 2013-08-29T11:29:37.240 に答える