If statement Stata:用现有观测值替换缺失值

If statement Stata:用现有观测值替换缺失值,if-statement,replace,stata,missing-data,If Statement,Replace,Stata,Missing Data,我试图用同一列中的值替换缺少的值,这取决于它们与其他列的相等性: 我有不同的公司,来自不同的行业和国家,来自不同的年份。下面只是一个小例子。如果来自同一家公司,我想用列中的现有值替换列industry或country中缺少的值 例如,公司123在第二年失去了它的行业。我在过去几年或以后几年都有过该公司所属的行业,但不知道如何添加它 另一个例子:我有一家444公司,它在第三年失去了它的国家。我确实有前几年的国家,但不知道如何将其转移/复制到第三年: --firm--year--industry-

我试图用同一列中的值替换缺少的值,这取决于它们与其他列的相等性:

我有不同的公司,来自不同的行业和国家,来自不同的年份。下面只是一个小例子。如果来自同一家公司,我想用列中的现有值替换列industry或country中缺少的值

例如,公司123在第二年失去了它的行业。我在过去几年或以后几年都有过该公司所属的行业,但不知道如何添加它

另一个例子:我有一家444公司,它在第三年失去了它的国家。我确实有前几年的国家,但不知道如何将其转移/复制到第三年:

 --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/帮助和互联网。我只能找到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==.
我不确定该国的替代情况,因为观察结果不是数字。我想我需要生成一个新的变量,其中包含国家/地区替换的数字


非常感谢

看看用户编写的。后者用于填充静态变量。它用集群中唯一的非缺失值替换集群中缺失的值。

看看用户编写的。后者用于填充静态变量。它将集群中缺失的值替换为该集群中唯一的非缺失值。

对于这个特定示例,行业变量在公司中是相同的,您也可以编写

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

该代码创建一个局部变量F,它是所有不同公司的列表。然后总结了每家公司的行业。由于来自同一家公司的观察结果的行业编号始终相同,因此平均值仅为行业编号。然后,该代码将行业值替换为该公司内所有观察值的这个数字,您可以省略&industry==。这里是代码的一部分,它仍然以相同的方式工作。

对于这个特定的示例,行业变量在公司内是相同的,您也可以编写

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

该代码创建一个局部变量F,它是所有不同公司的列表。然后总结了每家公司的行业。由于来自同一家公司的观察结果的行业编号始终相同,因此平均值仅为行业编号。然后,该代码将行业值替换为该公司内所有观察值的这个数字,您可以省略&industry==。这里有一部分代码,它仍然会以同样的方式工作。

非常感谢@dimitry。昨天我已经查看了stata的FAQ,但是xfill命令帮了我大忙!非常感谢迪米特里。昨天我已经查看了stata的FAQ,但是xfill命令帮了我大忙!或者,如果缺少industry,您可以选择Sort公司industry:replace industry=industry[1]。也就是说,levelsof和循环都是不必要的。正如你所说,这里有一个默认假设,即对于用于替换的每个公司,最多有一个不同的价值。或者,你可以选择Sort firm industry:replace industry=industry[1],如果缺少industry。也就是说,levelsof和循环都是不必要的。正如你所说,这里有一个默认假设,即对于用于替换的每个公司,最多有一个不同的价值。