Слияние двух наблюдений - PullRequest
       20

Слияние двух наблюдений

0 голосов
/ 08 октября 2019

У меня есть список мест с населением, очень похожий на приведенный ниже пример данных:

sysuse census, clear

Как можно объединить (суммировать) только два наблюдения, чтобы создать новое наблюдение, сохраняя при этом остальныеданные?

В приведенном ниже примере я хотел бы объединить Алабаму и Аляску, чтобы создать новое наблюдение под названием «Алабама и Аляска» с суммой их популяций.

С новым наблюдением,предыдущие записи нужно будет удалить.

   +----------------------------+
   | state        pop           |
   |----------------------------|
1. | Alabama      3,893,888     |
2. | Alaska       401,851       |
3. | Arizona      2,718,215     |
4. | Arkansas     2,286,435     |
5. | California   23,667,902    |
   +----------------------------+

   +-----------------------------------+
   | state                 pop         |
   |-----------------------------------|
1. | Alabama & Alaska      4,295,739   |  <--Alabama & Alaska combined
2. | Arizona               2,718,215   |  <--Retain other observations and variables
3. | Arkansas              2,286,435   |     
4. | California            23,667,902  |  
   +-----------------------------------+

Это мой оригинальный пример данных игрушки и ожидаемый результат:

PlaceName  Population
  Town 1      100
  Town 2      200
  Town 3      100
  Town 4      100

PlaceName             Population 
Town 1 & Town 2           300  
         Town 3           100  
         Town 4           100   

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Вот как это сделать с collapse. Как вы просите, это объединяет два наблюдения в одно и, таким образом, изменяет набор данных.

clear

input str6 PlaceName Population
"Town 1" 100
"Town 2" 200
"Town 3" 100
"Town 4" 100
end


replace PlaceName = "Towns 1 and 2" in 1/2 
collapse (sum) Population , by(PlaceName)

list 

     +--------------------------+
     |     PlaceName   Popula~n |
     |--------------------------|
  1. |        Town 3        100 |
  2. |        Town 4        100 |
  3. | Towns 1 and 2        300 |
     +--------------------------+
1 голос
/ 08 октября 2019

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

clear

input str6 PlaceName Population
"Town 1" 100
"Town 2" 200
"Town 3" 100
"Town 4" 100
end

generate PlaceName2 = cond(_n == 1, PlaceName + " & " + PlaceName[_n+1], PlaceName)
generate Population2 = cond(_n == 1, Population[_n+1] + Population, Population)

replace PlaceName2 = "" in 2
replace Population2 = . in 2

gsort - Population2 

list, abbreviate(12)

     +--------------------------------------------------------+
     | PlaceName   Population        PlaceName2   Population2 |
     |--------------------------------------------------------|
  1. |    Town 1          100   Town 1 & Town 2           300 |
  2. |    Town 4          100            Town 4           100 |
  3. |    Town 3          100            Town 3           100 |
  4. |    Town 2          200                               . |
     +--------------------------------------------------------+
...