2014-01-08 88 views
2

我是新來的SPSS和我有點卡住了一個問題。我有大約200個變量,我想通過它們的對來尋找相關係數在0.7以上的變量。我知道我可以使用相關性來得到一個係數矩陣,但這將是巨大且難以查看的。基本上,在僞代碼,我想要做的是:循環和if語句在SPSS

for (i = W1_1 to W1_200) { 
    for (j = i to W1_200) { 
     if CORRELATIONS(i,j)>0.7 { 
      print i, j, CORRELATIONS(i,j) 
     } 
    } 
} 

我不能爲我的生活工作如何做任何這SPSS。幫幫我!

回答

0

SPSS在CORRELATIONS命令中有一個幫助函數來導出相關矩陣。從那裏你可以操縱數據來給出符合你的標準的相關對。首先,讓我們製作一些假數據來說明。現在

*Making fake data. 
set seed 5. 
input program. 
loop i = 1 to 100. 
end case. 
end loop. 
end file. 
end input program. 
dataset name test. 
compute #base = RV.NORMAL(0,1). 
vector X(20). 
loop #i = 1 to 20. 
compute X(#i) = #base*(#i/20) + RV.NORMAL(0,1). 
end loop. 
exe. 

,我們可以運行CORRELATIONS命令和表導出到一個新的數據集(我這裏命名爲Corrs)。

DATASET DECLARE Corrs. 
CORRELATIONS 
    /VARIABLES=X1 to X20 
    /MATRIX=OUT('Corrs'). 

不幸的是,SPSS返回完整的矩陣(加上樣本量的其他信息)。我們只能選擇我們感興趣的行(ROWTYPE_列中的「CORR」),然後使用DO REPEAT將矩陣的上半部分或下半部分設置爲系統缺失值。

DATASET ACTIVATE Corrs. 
SELECT IF ROWTYPE_ = "CORR". 
*Now only making lower half of matrix. 
COMPUTE #iter = 0. 
DO REPEAT X = X1 TO X20. 
    COMPUTE #iter = #iter + 1. 
    IF #iter > ($casenum-1) X = $SYSMIS. 
END REPEAT. 

我將它們設置爲系統缺失值,因爲接下來的部分,我將使用VARSTOCASES重塑數據。這默認情況下會丟失缺失的值,所以我們最終不會得到冗餘相關對。

VARSTOCASES 
/MAKE Corr FROM X1 TO X20 
/INDEX X2 (Corr) 
/DROP ROWTYPE_. 
RENAME VARIABLES (VARNAME_ = X1). 

現在您擁有您的關聯配對列表,並且可以選擇符合您的標準的關聯關係。

SELECT IF ABS(Corr) >= .5. 

可以很容易地將相關對做成MACRO函數來返回對列表。下面是該功能,重新創建這裏使用的確切步驟。

DEFINE !CorrPairs (!POSITIONAL !CMDEND) 
DATASET DECLARE Corrs. 
CORRELATIONS 
    /VARIABLES=!1 
    /MATRIX=OUT('Corrs'). 
DATASET ACTIVATE Corrs. 
SELECT IF ROWTYPE_ = "CORR". 
COMPUTE #iter = 0. 
DO REPEAT X = !1. 
    COMPUTE #iter = #iter + 1. 
    IF #iter > ($casenum-1) X = $SYSMIS. 
END REPEAT. 
VARSTOCASES 
/MAKE Corr FROM !1 
/INDEX X2 (Corr) 
/DROP ROWTYPE_. 
RENAME VARIABLES (VARNAME_ = X1). 
!ENDDEFINE. 

宏只是需要的變量的列表(在活動數據集)來獲取相關性,並返回命名Corrs與相關對與在X1和X2列中定義的變量名的第二數據集。然後,在定義了上面的宏之後,可以簡單地通過下面重新創建上述步驟。

!CorrPairs X1 to X20. 
SELECT IF ABS(Corr) >= .5. 
EXECUTE. 
0

我的建議是使用OMS從輸出中提取相關值到數據文件中。使用宏來只運行你所需要的相關性:

DATASET DECLARE Correlations. 
OMS /SELECT TABLES /IF COMMANDS=['Correlations'] SUBTYPES=['Correlations'] 
/DESTINATION FORMAT=SAV NUMBERED=TableNumber_ OUTFILE='Correlations' VIEWER=YES. 
define runCorrs() 
!do !i1=1 !to 200 
!do !i2=!i1 !to 200 
!if (!i2<>!i1) !then 
corr !concat("W_",!i1) with !concat("W_",!i2). 
!ifend 
!doend !doend 
!enddefine. 
runCorrs. 
OMSEND. 
datas act Correlations. 
select if var2="Pearson Correlation". 
VARSTOCASES /make crlVal from W_2 to W_200/index=withvar(crlVal) 
      /drop TableNumber_ Command_ Subtype_ Label_ Var2. 

現在你把所有的相關性的一個很好的列表一起工作:

select if crlVal>0.7. 
exe.