2013-07-22 4 views
1

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

У меня есть разные фирмы, из разных отраслей & стран и разных лет , Ниже приводится лишь небольшой пример. Я хотел бы заменить отсутствующие значения (в промышленности столбцов или стране) на существующие значения в столбце, если они поступают из одной и той же фирмы.

Например, фирма 123 не имеет своей отрасли в году 2. У меня есть индустрия, в которой фирма относится к предыдущим (или иногда последующим) годам, но не знает, как ее добавить.

Другой пример: у меня есть фирмы 444, отсутствующий свою страну в год 3. У меня есть свои страны от предыдущих лет, но не знаю, как передать/копировать его на 3-й год:

--firm--year--industry--country 

--123----1-------1---------usa 

--123----2-------1---------usa 

--123----3--------.--------usa 

--333----1-------2---------usa 

--333----2--------.---------usa 

--444---1---------.----------fr 

--444---2---------2---------fr 

--444---3---------2----------. 

Я посмотрел на stata/help и в Интернете. Все, что я мог найти, это команда replace, но она заменила только равные числа.

Я думаю, что это будет что-то с:

replace industry=(problaby something dependant of the firm (and maybe year)) if industry==. 

replace country=(problaby something dependant of the firm (and maybe year)) if country==. 

Я не уверен, что для замены страны, потому что наблюдения не являются числами. Я думаю, мне нужно будет создать новую переменную с цифрами для замены страны.

Большое спасибо!

ответ

6

Посмотрите на replacing missing values with neighboring values FAQ и на написанное пользователем xfill. Последнее полезно для заполнения статических переменных. Он заменяет отсутствующие значения в кластере с уникальным отсутствующим значением внутри этого кластера.

+0

Большое спасибо @Dimitriy. Вчера я уже проверял часто задаваемые вопросы от stata, но команда xfill помогла мне отлично! – Franz

0

В данном конкретном примере, где переменная промышленность является тем же самым в фирме, вы также можете написать

levelsof firm, local(F) 
foreach f of local F{ 
sum industry if firm==`f' 
replace industry=r(mean) if firm==`f' & industry==. 
} 

Этот код создает локальную переменную F, которая представляет собой список всех различных фирм. Затем он обобщает отрасль для каждой фирмы. Поскольку номер отрасли всегда будет одинаковым для наблюдений той же фирмы, среднее значение будет только номером отрасли. Затем код заменяет значение отрасли на это число для всех наблюдений внутри этой фирмы (вы можете опустить здесь часть кода « industry ==.», И она все равно будет работать одинаково).

+0

В качестве альтернативы вы можете просто пойти 'bysort firm (промышленность): заменить отрасль = отрасль [1], если отсутствует (промышленность)'. То есть, 'levelsof' и цикл не нужны. (Как вы говорите, здесь есть молчаливое предположение, состоящее не более чем из одного значения для каждой фирмы, которое используется для замены.) –

Смежные вопросы