複数の条件を持つ Excel の Countif

複数の条件を持つ Excel の Countif

私は、数年にわたる多くの国の治安状況に関する指数を持っています。それぞれの国について、特定の年で何カ国が先行し、何カ国が遅れているかを調べたいのです。以下に添付した画像では、私がやりたいことを示したいと考えています。アルバニア (ALB) については手動で計算しました。サンプル内の合計 4 カ国のうち、1995 年には 3 カ国がアルバニアより先行し、1 カ国もアルバニアより下でした。同様に、1996 年には 2 カ国がアルバニアより上、1 カ国が下でした。1997 年と 1998 年も同様です。

ここでの問題は、134 か国と 16 年があることです。手動で行うには数週間かかります。MS Excel で次の数式を試しましたが、成功しませんでした。

=IF($B:$B=B2,COUNTIF($C$2:$C$17,"<"&C2))

これを実行する方法について何かアイデアはありますか? 提案があれば歓迎します。私は MS Excel と Stata を同時に使用しているため、どのプラットフォームでも動作します。

私のデータセットと達成したいことの簡略化された例

答え1

Stata での 1 つの方法:

clear all
set more off

*----- example data -----

input ///
country year law
1 1996 235
1 1997 25
1 1998 6445
2 1996 436
2 1997 2356
2 1998 224
3 1996 3129
3 1997 735
3 1998 836
end

list, sepby(country)

*----- what you want -----

sort year law
by year: gen ahead = _N - _n
by year: gen behind = _n - 1

sort country year
list, sepby(country)

もちろん、いくつかの仮定は立てられています。

編集

戦略は実にシンプルです。データを で並べ替えますyear law。結果は次のようになります。

. list, sepby(year)

     +-----------------------+
     | country   year    law |
     |-----------------------|
  1. |       1   1996    235 |
  2. |       2   1996    436 |
  3. |       3   1996   3129 |
     |-----------------------|
  4. |       1   1997     25 |
  5. |       3   1997    735 |
  6. |       2   1997   2356 |
     |-----------------------|
  7. |       2   1998    224 |
  8. |       3   1998    836 |
  9. |       1   1998   6445 |
     +-----------------------+

ここで、各グループごとにyear、最初の観測値(つまり、観測値1、4、7)が他の2つの観測値に追い抜かれている(つまり、観測値1は2、3に追い抜かれ、観測値4は5、6に追い抜かれ、観測値7は8、9に追い抜かれている)ことに注意する必要があります。これは、ahead観測値1、4、7の観測値。

次に、各yearグループごとに、2番目の観測値(つまり、観測値2、5、8)が他の1つの観測値に追い抜かれます。これは、1つahead観察2、5、8の観察。

最後に、各yearグループごとに、3番目の観測値(つまり、観測値3、6、9)は、他の観測値に追い抜かれていません。これは、ゼロahead観察3、6、9の観察。

これで、グループsortごとにデータを適切に処理した後year、シーケンスを作成するだけでよいことがわかります。2、1、0変数については、 としますahead。これはいくつかの方法で行うことができます。私は、添え字 ( を参照help subscripting) とシステム変数_nおよび_N( を参照help _variables) を使用して行うことにしました。_Nはグループあたりの観測値の合計数 (3) で、 は_nグループあたりの現在の観測値です。例: 観測値 1 の場合、計算は です3-1 = 2。観測値 2 の場合は3-2 = 1、などとなります。

変数behindも同様に計算されます。

結果は次のとおりです。

     +----------------------------------------+
     | country   year    law   ahead   behind |
     |----------------------------------------|
  1. |       1   1996    235       2        0 |
  2. |       2   1996    436       1        1 |
  3. |       3   1996   3129       0        2 |
     |----------------------------------------|
  4. |       1   1997     25       2        0 |
  5. |       3   1997    735       1        1 |
  6. |       2   1997   2356       0        2 |
     |----------------------------------------|
  7. |       2   1998    224       2        0 |
  8. |       3   1998    836       1        1 |
  9. |       1   1998   6445       0        2 |
     +----------------------------------------+

私のコードでは、新しい変数を計算した後、sortデータを元の並べ替え順序 ( country year) で再度表示します。

答え2

ExcelではCOUNTIFS(末尾に「S」が付く)複数の条件でカウントするために使用できるので、D2にコピーしたこの数式を試してください。

=COUNTIFS(B:B,B2,C:C,">"&C2)

E2の場合は<を>に反転するだけです

答え3

年で並べ替えて、数式を 16 回適用します。数式は次のようになります。=COUNTIF($C$2:$C$13,">"&C2)ここで、「C2-C13 is range of values for each year andC2」は、比較する必要のある国 (年) の値です。国の場合はそれほど時間はかからないと思います (おそらく 1 分程度)。

答え4

国を数えるには$i=1,...,n=164$を使用し、年を数えるには$t=1,...,16$を使用します。

$s_{it}$ を年 $t$ における国 $i$ のスコアとします。また、$\alpha_{it}$ を年 $t$ における国 $i$ より進んでいる国の数、$\beta_{it}$ を年 $t$ における国 $i$ より遅れている国の数とします。

当然のことながら(同点がないと仮定すると、決定を下す必要があります)、

$$ \alpha_{it}+\beta_{it}= N-1,\;\; \forall t$$ 素朴な方法:

1)16 個の観測値を(Excel で)分離し、それぞれ 164 個の断面からなる 16 個の断面シリーズを取得します。16 個のベクトルのそれぞれの値の ID を、どのような形式でも保持します(3 文字の国 ID、年)。

2)16個のベクトルを大きさ順に並べると、最低スコア最高スコア 3)16個のソートされたベクトルのそれぞれ右または左に、数列${1,2,3,...,164}$を作成します。

したがって、最低スコア$s_{it}$は数字$1$に関連付けられ、最高スコアは数字$164$に関連付けられます。

各国を各年のスコアに基づいてランク付けしました、順位$r_{it}$を表します。

それから

$$\alpha_{it} = 164-r_{it},\;\;\; \beta_{it} = r_{it}-1 $$

どれくらい時間がかかると思いますか?

関連情報