【问题标题】:Translating Stata if else statement to python将 Stata if else 语句翻译成 python
【发布时间】:2022-11-30 03:25:09
【问题描述】:

我有这个 我试图翻译成 python 的 Stata 代码。

if inlist(nid, 4580, 4250, 165101, 4679, 236205, 419098, 438439, 11240, 317089, 430032, 3716, 164729) {
    capture confirm variable child_age_year
    if !_rc {
        replace child_age_year = 0
        }
    else {
        gen child_age_year = 0
        }
}

它应该为没有 child_demographics 的调查创建一个 age_year 变量。

我现在拥有的是前两行的翻译,如下所示:

if sum((df['nid'] == i).any() for i in [4580, 4250, 165101, 4679, 236205, 419098, 438439, 11240, 317089, 430032, 3716, 164729]) == 12:

我应该如何完成该语句以使其复制原始 Stata 代码?

【问题讨论】:

    标签: python python-3.x stata


    【解决方案1】:

    该代码在 Stata 中没有多大意义,因此很难理解为什么要将其翻译成任何其他语言。

    没有意义的是过度命令

    if inlist(nid, 4580, 4250, 165101, 4679, 236205, 419098, 438439, 11240, 317089, 430032, 3716, 164729) 
    

    在 Stata 中只能应用于数据集中的第一个观察值(案例、记录、行)。

    换句话说。这意味着在实践中

    if inlist(nid[1], 4580, 4250, 165101, 4679, 236205, 419098, 438439, 11240, 317089, 430032, 3716, 164729) 
    

    作为附加到代码其余部分的条件。

    代码的其余部分说:如果某某变量存在,则在每次观察中用 0 覆盖它的值;否则在每次观察中用 0 创建它。

    更有可能的是,最初的程序员混淆了 if 命令(此处使用)和 if 限定符。

    我将此代码及其附带的任何先验概率设置为接近 1,因为在检查之前不值得翻译。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2019-04-09
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 2022-07-23
      相关资源
      最近更新 更多