Stata:用现有观察值替换缺失值

时间:2013-07-22 17:17:36

标签: if-statement replace stata missing-data

我正在尝试使用同一列中的值替换缺失值,这取决于它们与其他列的相等性:

我有不同的公司,来自不同的行业和国家和不同年份。以下只是一个小例子。如果它们来自同一家公司,我想用列中的现有值替换缺失值(在列行业或国家/地区)。

例如,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 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==.

我不确定国家更换,因为观察结果不是数字。我想我需要为国家替换生成一个带有数字的新变量。

非常感谢!

2 个答案:

答案 0 :(得分:6)

查看replacing missing values with neighboring values FAQ和用户编写的xfill。后者对于填充静态变量很有用。它使用该群集中唯一的非缺失值替换群集中的缺失值。

答案 1 :(得分: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 ==。"部分代码,它仍将以相同的方式工作)。