将 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 代码不会仅仅因为观察有一个默认循环就被认为是一个循环。
Stata 中 egen
的这种特殊用法可以通过使用 AGGREGATE
命令复制到 SPSS 中。使用 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.
谁能帮忙翻译一下下面的 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 代码不会仅仅因为观察有一个默认循环就被认为是一个循环。
Stata 中 egen
的这种特殊用法可以通过使用 AGGREGATE
命令复制到 SPSS 中。使用 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.