将Stata循环转换为SPSS循环

时间:2015-04-14 10:45:57

标签: loops if-statement stata spss

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

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

2 个答案:

答案 0 :(得分:1)

这绝不是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代码不会被认为是一个循环,只是因为观察结果存在隐性循环。

答案 1 :(得分:1)

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