【问题标题】:Stata data manipulation状态数据操作
【发布时间】:2014-05-04 21:32:55
【问题描述】:

假设我的数据集是

t id b c z
1 1  0 1 1
2 1  1 1 0
3 1  0 1 1
4 1  0 1 1
1 2  0 1 1
1 2  1 1 1

我想创建一个虚拟变量Dum1,其中Dum1= 1 如果变量z 在观察b =1 后的接下来的两个周期内取值为1 每个id

例如,对于id=1、b=1 在t=2 以及因为对于id=1 z=1 在t=3 和t=4 dummy 应该取值 1。

如果这可以在 SAS 中完成,那也很好。

【问题讨论】:

  • 我没有对此投反对票,但反对票通常意味着“你没有向我们展示你的代码;这并不是一个人们为你编写代码的网站,尽管有时会发生这种情况"。

标签: sas stata data-modeling data-manipulation


【解决方案1】:

这是我在 Stata 中的做法:

// make some example data
clear
input ///
t id b c z
1 1  0 1 1
2 1  1 1 0
3 1  0 1 1
4 1  0 1 1
1 2  0 1 1
2 2  1 1 1
end

// start making the variable
tsset id t
gen byte dum1 = ///
 ( ( b == 1 ) & ( F1.z == 1 ) & ( F2.z == 1 ) )

我通过给它提供一个逻辑语句创建了指标变量(我更喜欢这个术语而不是虚拟变量),如果“真”,Stata 将其评估为 1,如果“假”则评估为 0。有关更多信息,请参阅here

我使用time series operators F1.F2. 来获取接下来两个时期的值。

【讨论】:

  • 在给定tsset 的情况下,by: 前缀是多余的。 (应该向旁观者保证,这里的任何竞争都是完全友好的。)
  • 这是对“在接下来的两个时期内”的不同解释。在二读时,它可能是 OP 想要的。
【解决方案2】:
tsset id t 
gen dum = b == 1 & (F.z == 1 | F2.z == 1) 

gen dum = b == 1 & inlist(1, F.z, F2.z) 

所以这是在将数据设置为具有面板和时间变量的面板数据之后的 Stata 转换。该指标(我建议不要使用“虚拟”一词,通常被误解为冒犯性)是

1 当且仅当 b 的当前值为 1 并且 z 的下一个值或下一个但一个值是 1

否则为0

编辑:如果“在接下来的两个时间段内”表示“两者”而不是“任何一个”,则inlist() 解决方案无效,| 应该是&,如@Maarten Buis 的回答。

【讨论】:

  • 非常感谢大家。我是 stata 的新手,这真的很有帮助。很多爱
猜你喜欢
  • 1970-01-01
  • 2020-08-24
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 2022-10-18
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多