Loops 将Stata循环转换为SPSS循环
有人能帮忙翻译以下Stata代码吗?我需要这段代码在SPSS中进行进一步分析Loops 将Stata循环转换为SPSS循环,loops,if-statement,stata,spss,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 if year在SPSS代码中,这绝对不是一个答案,但这一点在评论中并不适用 Stata代码 if year < 1990 { bys
if year<1990 {
bysort country year ID: egen sum080=sum(PY080g)
gen hydisp=(HY020+sum080)*HY025
}
else gen hydisp=HY020*HY025
if year在SPSS代码中,这绝对不是一个答案,但这一点在评论中并不适用
Stata代码
if year < 1990 {
bysort country year ID: egen sum080=sum(PY080g)
gen hydisp=(HY020+sum080)*HY025
}
else gen hydisp=HY020*HY025
或
bysort国家年份ID:egen sum080=总和(PY080g)
gen hydisp=状态(年份<1990年,(HY020+sum080)*HY025,HY020*HY025)
OP关于代码似乎有误的评论是一份糟糕的问题报告。到底出了什么问题?这可能只不过是无法复制在Stata中获得的结果,这并不奇怪,因为Stata代码几乎肯定不是预期的。第一次观测似乎不太可能是特殊的,而是应该根据年的值对所有观测值进行计算
详细信息: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
bysort国家年份ID:egen sum080=总和(PY080g)
gen hydisp=(HY020+sum080)*HY025,如果年份小于1990年
如果年份>=1990,则更换hydisp=HY020*HY025
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.
AGGREGATE OUTFILE=*MODE=ADDVARIABLES
/BREAK=国家年份ID
/sum080=总和(PY080g)。
如果年份<1990,则执行此操作。
计算hydisp=(HY020+sum080)*HY025。
其他的
计算hydisp=HY020*HY025。
结束如果。
现在翻译的SPSS代码可以工作了。它产生的结果与修改后的Stata代码相同。因此,1)我的原始Stata代码确实有一些错误2)Andy W的SPSS解决方案是正确的。非常感谢。
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)
bysort country year ID: egen sum080 = sum(PY080g)
gen hydisp = (HY020 + sum080) * HY025 if year < 1990
replace hydisp = HY020 * HY025 if year >= 1990
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.