2013-07-22 48 views
1

我試圖從依賴從其他列他們平等相同的列值替換缺失值:塔塔:與現有的觀測替換缺失值

我有不同的企業,不同行業&國家和不同年份。下面只是一個小例子。如果他們來自同一家公司,我想用列中現有的值替換缺失的值(列行業或國家)。

例如,公司123在第2年錯過了它的行業。我擁有的公司屬於以前(有時是成功)年的企業,但不知道如何添加它。

另一個例子:我公司444缺少了國家年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 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的FAQ,但是xfill-command幫助我完美! – 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這是所有不同的企業名單。然後它總結了每個公司的行業。由於來自同一家公司的觀測數據始終保持一致,因此平均值只是行業數量。然後代碼將該行業的價值替換爲該公司內所有觀察值的這個數字(您可以省略「&行業==」部分代碼,它仍然以相同的方式工作)。

+0

另外,你也可以選擇'bysort firm(industry)':如果失蹤(行業),則取代industry = industry [1]。也就是說,'levelsof'和循環都是不必要的。 (正如你所說,對於每個被替換的公司,最多隻有一個不同的價值。 –