Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 将Stata循环转换为SPSS循环_Loops_If Statement_Stata_Spss - Fatal编程技术网

Loops 将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

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