【问题标题】:define variable if panel data takes a value once如果面板数据取值一次,则定义变量
【发布时间】:2016-02-12 21:51:40
【问题描述】:

我有一个面板数据集,由一个 id 变量和一个特定字符串变量标识,每个时间段(每周)具有不同的值。并非每个 id 都会在每周出现(新的可以出现,旧的可以消失)。

当此变量包含特定术语时,我创建了一个虚拟变量,但它仅捕获一周内的一次出现。我想要的是,每个 id 都有一个特定的虚拟对象,指示该术语是否至少在一周内包含在字符串变量中。因此,如果第 34 周 id x 包含该术语,我希望在所有其他周内也有一个假人,它显示一个“1”,因为该术语曾经包含在 id x 中

我尝试格式化为xtset 并通过F. 替换,但这并没有按预期工作。

【问题讨论】:

    标签: stata panel-data


    【解决方案1】:

    我认为以下是您想要的,因为您已经创建了 term 变量,如果字符串包含该术语,则设置为 1,否则(我假设)为 0。

    by id (time), sort: egen newterm = max(term)
    replace term = newterm
    drop newterm
    

    by id (time), sort: ... 命令将为每个id 单独运行egenegen 将为每个id 找到term 的最大值,因此如果term 为1,newterm 将为1。

    【讨论】:

    • bysort id (term) : replace term = term[_N] 似乎是对此的简化。
    • 同意,但我会按照 sort id time 的顺序将其按照熟悉的顺序(或至少按照我熟悉的面板数据顺序)。
    • 谢谢!我想我明白其中的逻辑。据我了解,如果不是每个(id)都包含在每个(时间)中作为观察,这也应该有效。
    • @NickCox:我猜 term[_N] 是对 term 的最后一次观察,还是最高的?在我的情况下,该术语包含在小组的任何时间,因此不一定在小组的末尾。因此,最大值对我来说似乎更安全。为了确保最后一个值 _N 是最高的,是否需要按术语排序?
    • 无需猜测。阅读by:,例如stata-journal.com/sjpdf.html?articlenum=pr0004 并使用简单的数据集进行试验,看看会发生什么。你的疑虑是没有根据的。假设 term 通过构造是 0 或 1,任何出现的 1 都将被排序到每个观察块的末尾,因此这是一种安全(且快速)的查找最大值的方法。如果问题不是您告诉我们的,建议可能会有所不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 2016-05-08
    • 2016-11-04
    • 2015-09-05
    • 2016-09-10
    • 1970-01-01
    相关资源
    最近更新 更多