Подсчет вхождений в разных столбцах с одинаковой информацией - PullRequest
0 голосов
/ 08 мая 2018

У меня есть набор данных, который выглядит следующим образом

ID S1 S2 S3 year
1  1  2     1999
1  1  2     2000
2  1        1999
2  1        2000
3  1        1999
3  2        2000
4  1  2  3  1999
4  3  1  2  2000
5  1  2     1999
5  1  3     2000

, где первый столбец - идентификатор субъекта, S1 - S3 - идентификаторы местоположения, а год относится либо к 1999, либо к 2000 году. Я хотел бы сосчитать все случаи, когда субъект находится в одном и том же месте в обоих лет (с использованием Stata). То есть для субъекта 1 это значение равно 2, для субъекта 2 - 1, для субъекта 3 - 0, для субъекта 4 - 3 и для субъекта 5 - 1.

1 Ответ

0 голосов
/ 08 мая 2018

Полагаю, ваши пробелы действительно отсутствуют. Это также должно работать, если S1 S2 S3 на самом деле строка, а пробелы - пустые строки. Пример того, что 1 2 3 и 3 1 2 являются эквивалентными, исключает различные более простые решения простого подсчета сходств над S1 S2 S3 в цикле.

clear 
input ID S1 S2 S3 year
1  1  2  .  1999
1  1  2  .  2000
2  1  .  .  1999
2  1  .  .  2000
3  1  .  .  1999
3  2  .  .  2000
4  1  2  3  1999
4  3  1  2  2000
5  1  2  .  1999
5  1  3  .  2000
end 

reshape long S, i(ID year) j(which) 
bysort ID (S) : gen count = sum(S == S[_n-1] & !missing(S)) 
by ID: replace count = count[_N] 
reshape wide S, i(ID year) j(which)  

list, sepby(ID) 

     +----------------------------------+
     | ID   year   S1   S2   S3   count |
     |----------------------------------|
  1. |  1   1999    1    2    .       2 |
  2. |  1   2000    1    2    .       2 |
     |----------------------------------|
  3. |  2   1999    1    .    .       1 |
  4. |  2   2000    1    .    .       1 |
     |----------------------------------|
  5. |  3   1999    1    .    .       0 |
  6. |  3   2000    2    .    .       0 |
     |----------------------------------|
  7. |  4   1999    1    2    3       3 |
  8. |  4   2000    3    1    2       3 |
     |----------------------------------|
  9. |  5   1999    1    2    .       1 |
 10. |  5   2000    1    3    .       1 |
     +----------------------------------+
...