有人可以帮助翻译以下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.
但是这段代码似乎错了。你知道如何解决这个问题吗?
答案 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.