Как я могу сравнить значения соседних наблюдений? - PullRequest
0 голосов
/ 20 октября 2018

У меня есть два набора данных, которые я добавил в Stata.

В обоих наборах данных есть одна переменная, скажем Age.Я отсортировал данные так, чтобы возрасты были в порядке возрастания.Я хочу удалить наблюдения в каждом наборе данных, где соответствующие возрасты не совпадают.

Набор данных 1:

Obs Age
1    7
2    8
3   10
4    5

Набор данных 2:

Obs Age
1   10
2    5
3    9
4    7

Объединены и отсортированы в порядке возрастания:

Obs Age
1    5
2    5
3    7
4    7
5    8
6    9
7   10
8   10

Так как возрастесли сортировка не совпадает с наблюдениями 5 и 6, я хочу удалить их.По сути, мне нужен способ перебрать пары соседних чисел и сравнить их значения, чтобы у меня остались только пары с одинаковым возрастом.

1 Ответ

0 голосов
/ 20 октября 2018

Цикл по наблюдениям неэффективен и в подавляющем большинстве случаев не нужен.

Для меня работает следующее:

clear

input age
5
5
7
7
8
9
10
10
end

generate tag = age != age[_n+1] & age != age[_n-1]
list

     +-----------+
     | age   tag |
     |-----------|
  1. |   5     0 |
  2. |   5     0 |
  3. |   7     0 |
  4. |   7     0 |
  5. |   8     1 |
     |-----------|
  6. |   9     1 |
  7. |  10     0 |
  8. |  10     0 |
     +-----------+

После избавления от соответствующих наблюдений вы получаете желаемоерезультат:

keep if tag == 0
list

     +-----------+
     | age   tag |
     |-----------|
  1. |   5     0 |
  2. |   5     0 |
  3. |   7     0 |
  4. |   7     0 |
  5. |  10     0 |
     |-----------|
  6. |  10     0 |
     +-----------+
...