여러 기준을 사용하는 Excel의 Countif

여러 기준을 사용하는 Excel의 Countif

나는 수년에 걸쳐 많은 국가의 법과 질서 상태에 대한 색인을 보유하고 있습니다. 각 국가에 대해 특정 연도 동안 얼마나 많은 국가가 앞서고 있고 얼마나 많은 국가가 뒤쳐져 있는지 알고 싶습니다. 아래 첨부된 이미지에서는 제가 하고 싶은 일을 보여드리려고 노력했습니다. 알바니아(ALB)에 대한 계산을 수동으로 수행했습니다. 1995년 표본의 총 4개 국가 중 3개 국가가 알바니아보다 앞서 있었고 그보다 낮은 국가는 없었습니다. 마찬가지로 1996년에도 2개국이 알바니아 위에 있었고 1개국이 알바니아 아래에 있었습니다. 1997년과 1998년에도 마찬가지다.

여기서 문제는 134개 국가와 16년이 있다는 것입니다. 수동으로 수행하려면 몇 주가 걸릴 것입니다. MS Excel에서 다음 공식을 시도했지만 성공하지 못했습니다.

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

어떻게 할 수 있는지 아이디어가 있습니까? 나는 제안에 열려 있습니다. 저는 MS Excel과 Stata를 동시에 사용하고 있으므로 모든 플랫폼이 저에게 적합합니다.

내 데이터세트의 단순화된 예와 내가 달성하려는 목표

답변1

Stata에서는 단방향:

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)이 다른 두 관찰(즉, obs 1이 2, 3만큼 앞서고, obs 4가 5, 6만큼 앞서고, obs 4가 5, 6만큼 앞서고, obs 4가 5, 6만큼 앞섭니다.) obs 7은 8, 9보다 앞섭니다). 이는 다음이 있음을 의미합니다.ahead관측치 1, 4, 7의 관측치입니다 .

다음으로, 각 year그룹마다 두 번째 관측치(즉, 관측치 2, 5, 8)가 다른 관측치보다 앞섭니다. 이는 다음이 있음을 의미합니다.하나ahead관찰 2, 5, 8의 관찰 .

마지막으로, 각 year그룹마다 세 ​​번째 관측치(즉, 관측치 3, 6, 9)는 다른 관측치보다 앞섭니다. 이는 다음이 있음을 의미합니다.ahead관찰 3, 6, 9의 관찰 .

이제 그룹 sort별로 데이터를 적절하게 입력한 후 year시퀀스를 생성하면 됩니다.둘, 하나, 제로, 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$ 국가의 점수를 나타냅니다. $t$년에 $i$보다 앞서는 국가의 수를 $\alpha_{it}$로 표시하고 $t년에 $i$보다 뒤처지는 국가의 수를 $\beta_{it}$로 표시합니다. $.

분명히(결정을 내려야 하는 관계가 없다고 가정),

$$ \alpha_{it}+\beta_{it}= N-1,\;\; \forall t$$ 순진한 방법:

1)Excel에서 $16$ 관측치를 분리하여 각각 $164$ 횡단면의 $16$ 횡단면 계열을 얻습니다. 각 $16$ 벡터의 각 값에 대한 ID를 어떤 방식으로든 유지합니다(3자리 국가 ID, 연도).

2)각 $16$ 벡터를 크기별로 정렬합니다.가장 낮은점수를 매기다제일 높은점수 삼)$16$ 정렬된 각 벡터의 오른쪽이나 왼쪽에 ${1,2,3,...,164}$ 계열을 만듭니다.

따라서 가장 낮은 점수인 $s_{it}$는 숫자 $1$과 연관되고, 가장 높은 점수는 숫자 $164$와 연관됩니다.

각 연도의 점수를 기준으로 각 국가의 순위를 매겼습니다., 순위 $r_{it}$를 나타냅니다.

그 다음에

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

얼마나 걸릴 것 같아요?

관련 정보