Слияние двух переменных - PullRequest
0 голосов
/ 20 октября 2018

У меня есть следующие данные:

enter image description here

Я хочу превратить данные на верхней панели в данные на нижней.

Для каждой исходной группы я хочу добавить одну строку с целевым значением -1 и значением var из varnew.

Я попытался найти команду, которая добавляет одну строку, такчто я могу сделать что-то вроде:

bysort origin: addrow

Тем не менее, кажется, что ничего такого нет.

1 Ответ

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

Используя данные примера вашей игрушки:

clear

input destination origin var varnew
0 111 124 .
111 111 671 168
0 222 623 .
222 222 768 865
end

list, abbreviate(15)

     +-------------------------------------+
     | destination   origin   var   varnew |
     |-------------------------------------|
  1. |           0      111   124        . |
  2. |         111      111   671      168 |
  3. |           0      222   623        . |
  4. |         222      222   768      865 |
     +-------------------------------------+

expand 2 if varnew != .
sort origin destination 
list, abbreviate(15)

     +-------------------------------------+
     | destination   origin   var   varnew |
     |-------------------------------------|
  1. |           0      111   124        . |
  2. |         111      111   671      168 |
  3. |         111      111   671      168 |
  4. |           0      222   623        . |
  5. |         222      222   768      865 |
     |-------------------------------------|
  6. |         222      222   768      865 |
     +-------------------------------------+

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

bysort origin: replace destination = -1 if destination[_n] == destination[_n+1] & !missing(varnew)
bysort origin: replace var = varnew if var[_n] == var[_n+1] & !missing(varnew)

list destination origin var, abbreviate(15)

     +----------------------------+
     | destination   origin   var |
     |----------------------------|
  1. |           0      111   124 |
  2. |          -1      111   168 |
  3. |         111      111   671 |
  4. |           0      222   623 |
  5. |          -1      222   865 |
     |----------------------------|
  6. |         222      222   768 |
     +----------------------------+
...