创建一个包含纵向面板数据中滞后值的变量

时间:2015-05-30 08:58:02

标签: stata

我有1000多个家庭的数据。每个家庭有31个数据点。该数据包含一个变量,该变量指示家庭是否在某个商店进行了购买。我想创建一个虚拟变量,在家庭进行购买时给出1,并在该特定家庭的剩余时间内保持为1。

例如,

Household ID - Purchase - New variable
1 - 0 - 0
1 - 0 - 0
1 - 0 - 0
1 - 1 - 1
1 - 0 - 1

2 - 0 - 0
2 - 1 - 1
2 - 0 - 1
2 - 1 - 1
2 - 1 - 1

现在我尝试使用以下代码

//electronics purchase dummy durin the full time series
gen betaal_winkel_ykw_dummy=0
replace betaal_winkel_ykw_dummy=1 if Betaal_winkel_ykw>0 & !missing(Betaal_winkel_ykw)

levelsof HHID, local(levels)
foreach l of local levels {
   replace betaal_winkel_ykw_dummy=1 if L.betaal_winkel_ykw_dummy==1
}

但是,Stata在正确使用此代码方面遇到了一些困难,因为当我运行此代码时,它会开始进行大量的更改'因此它仍在计算某些东西(我不知道是什么),但它不再做出改变,

 . foreach l of local levels {
  2.    replace betaal_winkel_ykw_dummy=1 if L.betaal_winkel_ykw_dummy==1
  3. }
(71048 real changes made)
(0 real changes made)
(0 real changes made)
(0 real changes made)

这就是继续前进。我究竟做错了什么?我应该使用什么代码来获得相同的结果(因为当我在运行时打破代码时,在我的数据集中正确调整了代码)但没有Stata无休止地计算无意义事物的麻烦。

1 个答案:

答案 0 :(得分:1)

您在示例中使用的变量名称对我来说太长而且含糊不清,因为您想要在代码中查看详细信息。我根据您的问题的措辞提供示例代码。请注意,不需要循环!

我假设你有一些变量,你的面板被排序,很可能是一个日期变量。我将在我的示例order中调用它。

然后,您需要做的就是检查每个面板的运行总和的值,并相应地创建新变量。如果运行总和> 0,然后进行了购买。

clear
set more off

*----- example data -----

input ///
id purch newvar
1  0  0
1  0  0
1  0  0
1  1  1
1  0  1
2  0  0
2  1  1
2  0  1
2  1  1
2  1  1
end

*----- what you want -----

gen order = _n
bysort id (order) : gen newvar2 = sum(purch) > 0

list, sepby(id)

如果您不熟悉此基本构造,请参阅help by