2015-04-14 104 views
1

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

但这个代码出现是错误的。你有什么想法如何解决这个问题?

回答

1

Stata中egen的这种特殊用法可以通过使用AGGREGATE命令在SPSS中复制。使用尼克考克斯的修订塔塔代码:

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. 
+0

现在翻译SPSS代码工作。它产生与修订后的Stata代码相同的结果。所以确实如此:1)我原来的Stata代码有一些错误2)Andy W的SPSS解决方案是正确的。谢谢。 – theobaldtiger

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代码不会被认为是一个循环,只是因为观察时有一个默认循环。