【问题标题】:Stata: combine foreach with byStata:将 foreach 与 by 结合使用
【发布时间】:2016-06-23 17:20:36
【问题描述】:

我的数据缺少变量issue 的一些值。我正在尝试估算最近的 issue 值(对于该主题,由 id1 和 id2 标识),如果有的话。如果所有过去的issue 值都丢失了,我希望代码将当前值保留为丢失。

我尝试了以下代码,但 Stata 说 foreach 不能与 by 结合使用。

bys id1 id2 (date): foreach v in 1(1)_n {
replace issue[n] = issue[n-v] if !missing(issue[n-v]) and missing(issue[n])==1
}

有没有办法在不使用foreachby 的情况下做到这一点?

【问题讨论】:

  • 在开始一个新话题之前请发送stackoverflow.com/questions/37976385/…
  • 抱歉,我好久没来了。我应该评论问题已经解决,还是删除问题,或者写一个包含您的解决方案的答案(非常感谢)?
  • 您需要做的就是指出哪些有效(或无效)。

标签: stata data-manipulation data-cleaning


【解决方案1】:

尝试循环观察是完全没有必要的,因为 Stata 会以任何方式这样做。

如果您想仅使用最新的非缺失值,您可能需要这样:

clonevar issue, generate(clone) 
bys id1 id2 (date): replace issue = clone[n-1] if missing(issue) 

请注意代码中的以下错误,除了您标记的错误:

foreach v in 1(1)_n: foreach 不会用in 扩展numlist;它也不会为您评估_n

replace issue[n]: 该位置不允许下标; replace issue 无论如何都是一样的意思。

issue[n-v]: 你需要一个本地参考。

and 不是关键字:如果你想要一个逻辑“和”,你需要&

n 大概是_n 的拼写错误

另见FAQ on replacing missing values

【讨论】:

  • 感谢您的回答,以及代码反馈。这会用最新的非缺失值代替吗?似乎 clone[n-1] 采用最新的值,无论它是否丢失。
  • 在我的回答中查看上面粗体标记的资格。如果可以使用上一个之前的非缺失值,不管它是什么时候,提到的常见问题解答给出了详细的讨论。
  • 另外,将missing替换为missing也不会有损失。
  • 好的,谢谢。常见问题解答对您有很大帮助,您的解释也很有帮助。由于我想使用上一个非缺失值,因此我最终按照常见问题解答使用了bys id1 id2 (date): replace issue = issue[n-1] if missing(issue)
猜你喜欢
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 2017-10-25
  • 2015-05-21
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
相关资源
最近更新 更多