【问题标题】:Translate a Stata loop into a SPSS loop将 Stata 循环转换为 SPSS 循环
【发布时间】:2015-04-14 10:45:57
【问题描述】:

谁能帮忙翻译以下Stata代码?我需要此代码在 SPSS 中进行进一步分析。

if year<1990 {
    bysort country year ID: egen sum080=sum(PY080g)
    gen hydisp=(HY020+sum080)*HY025
}
else gen hydisp=HY020*HY025

我尝试使用以下 SPSS 代码解决问题:

DO IF year<1990.
   SORT CASES BY country year ID.
   COMPUTE sum080 = SUM(PY080g).
   COMPUTE hydisp=(HY020+sum080)*HY025.
ELSE. 
   COMPUTE hydisp=HY020*HY025.
END IF.
EXECUTE.

但是这段代码似乎是错误的。你知道如何解决这个问题吗?

【问题讨论】:

    标签: loops if-statement stata spss


    【解决方案1】:

    egen 在 Stata 中的这种特殊用法可以通过使用 AGGREGATE 命令在 SPSS 中复制。使用 Nick Cox 修改后的 Stata 代码:

    bysort country year ID: egen sum080 = sum(PY080g)
    gen hydisp = (HY020 + sum080) * HY025 if year < 1990 
    replace hydisp = HY020 * HY025 if year >= 1990 
    

    SPSS 中的同义代码集是:

    AGGREGATE OUTFILE=* MODE=ADDVARIABLES
      /BREAK = country year ID
      /sum080 = SUM(PY080g).
    DO IF Year < 1990.
      COMPUTE hydisp = (HY020+sum080)*HY025.
    ELSE.
      COMPUTE hydisp = HY020*HY025.
    END IF.
    

    【讨论】:

    • 现在翻译的 SPSS 代码可以工作了。它产生与修改后的 Stata 代码相同的结果。所以确实 1) 我原来的 Stata 代码有一些错误 2) Andy W 的 SPSS 解决方案是正确的。谢谢。
    【解决方案2】:

    这绝不是 SPSS 代码的答案,但它提出的观点在评论中并不顺利。

    Stata 代码

    if year < 1990 {
        bysort country year ID: egen sum080=sum(PY080g)
        gen hydisp=(HY020+sum080)*HY025
    }
    else gen hydisp=HY020*HY025
    

    会被解释为

    if year[1] < 1990 {
        bysort country year ID: egen sum080=sum(PY080g)
        gen hydisp=(HY020+sum080)*HY025
    }
    else gen hydisp=HY020*HY025
    

    即在第一次观察(案例,记录)中,分支位于year 的值上。 if 命令和if 限定符是完全不同的结构。所需的代码似乎更有可能类似于

    bysort country year ID: egen sum080 = sum(PY080g)
    gen hydisp = (HY020 + sum080) * HY025 if year < 1990 
    replace hydisp = HY020 * HY025 if year >= 1990 
    

    bysort country year ID: egen sum080 = sum(PY080g)
    gen hydisp = cond(year < 1990, (HY020 + sum080) * HY025, HY020 * HY025) 
    

    OP 的代码似乎错误的评论是一个糟糕的问题报告。究竟出了什么问题?这可能只不过是无法复制在 Stata 中获得的结果,这不足为奇,因为 Stata 代码几乎肯定不是预期的。第一次观察似乎不太可能是特殊的,而是应该根据year的值对所有观察进行计算

    详细信息:sum() 作为egen 函数未记录在案,支持total(),但语法仍然合法。

    详细信息:这里的 Stata 代码不会仅仅因为观察结果存在一个默认循环就被视为循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      • 2014-12-11
      • 2018-02-22
      • 2017-04-26
      • 2018-08-19
      • 1970-01-01
      相关资源
      最近更新 更多