繁体   English   中英

将Stata循环转换为SPSS循环

[英]Translate a Stata loop into a SPSS loop

有人可以帮忙翻译以下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.

但是此代码似乎是错误的。 您知道如何解决该问题吗?

这绝不是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代码不会仅仅因为观测值存在默认循环而被视为循环。

可以使用AGGREGATE命令在SPSS中复制对Stata中egen这种特殊使用。 使用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.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM