Добавление наблюдений между строками - PullRequest
0 голосов
/ 08 февраля 2019

Я хотел бы создать новые наблюдения следующим образом:

A   B   C
1   1   1
1   2   2
1   3   4
1   4   5
1   5   2
2   1   1
2   2   5
2   3   3
2   4   3
*3* 1   .
*3* 2   .
*3* 3   .
*3* 4   .
*3* 5   .
4   1   4
4   2   3
4   3   1

Новые строки отмечены звездочками.

Как создать новые наблюдения для переменных A и B

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Код может быть короче.

expand 2 if _n < 6
replace A = 3 if _n > _N - 5
*replace B = _n + 5 - _N if A == 3
replace C = . if A == 3
sort A B
0 голосов
/ 08 февраля 2019

Это простое expand:

clear

input A   B   C
1   1   1
1   2   2
1   3   4
1   4   5
1   5   2
2   1   1
2   2   5
2   3   3
2   4   3
4   1   4
4   2   3
4   3   1
end

generate id = _n
expand 6 if id == 10

replace id = 11 if _n == _N
replace A = 3 if id == 10
replace C = . if id == 10

bysort id: replace B = cond(_n == 1, 1, B[_n-1]+1) if id == 10

, которое даст желаемый результат:

list, sepby(A)

     +----------------+
     | A   B   C   id |
     |----------------|
  1. | 1   1   1    1 |
  2. | 1   2   2    2 |
  3. | 1   3   4    3 |
  4. | 1   4   5    4 |
  5. | 1   5   2    5 |
     |----------------|
  6. | 2   1   1    6 |
  7. | 2   2   5    7 |
  8. | 2   3   3    8 |
  9. | 2   4   3    9 |
     |----------------|
 10. | 3   1   .   10 |
 11. | 3   2   .   10 |
 12. | 3   3   .   10 |
 13. | 3   4   .   10 |
 14. | 3   5   .   10 |
     |----------------|
 15. | 4   1   4   11 |
 16. | 4   2   3   11 |
 17. | 4   3   1   12 |
     +----------------+
...