2015-10-27 98 views
2

我需要計算一組評級(var V_Cr1到V_Cr11)的均值,前提是相關控制變量(var targ_i.1到targ_i.11)滿足條件(> = 4並沒有失蹤)。計算平均值在SPSS循環內

起初我試圖調整我發現的語法http://stackoverflow.com/questions/12711613/loop-through-items-and-sum-items-in-spss/12794702

這是我用什麼:

COMPUTE TARG_VCs=0. 
EXECUTE. 
VECTOR TARG_I = targ_i.1 to targ_i.11. 
VECTOR TARG_VC = V_Cr1 to V_Cr11. 
LOOP #vecid = 1 to 11. 
DO IF (TARG_I(#vecid) <=4 and not missing (TARG_VC((#vecid)))). 
COMPUTE TARG_VCs= TARG_VCs+ TARG_VC(#vecid). 
END IF. 
END LOOP. 
EXECUTE. 

它似乎一直在努力提供給我的總和,雖然它返回0,而不是失蹤,當條件不滿足,我可以變通解決的。然而,從總和到有效的意思,我需要一個有效的V_Cr滿足targ_i的計數。我的數據有targ_i < = 4,並且不缺少V_Cr缺失的地方(反之亦然,但在上面的代碼中已經說明了這一點),所以簡單的計數不會。

我想我需要一種直接的方法來計算循環內的平均值,一種在代碼中嵌入一個計數的方法(我一直在嘗試,沒有運氣)或另一種方法來爲我的一個有效分母平均計算在一邊。有任何想法嗎?

SPSS語法的新手(對任何語法來說都是這樣),所以對我來說這看起來要複雜得多,可以肯定。 TIA!

回答

1

以下方法的想法是首先將變量V_Cr1複製到V_Cr11,如果滿足測試變量targ_i.1到targ_i.11的條件,則複製變量將被設置爲sysmis。在第二步中,將計算條件拷貝變量的平均值。

* Copy v_CrX into v_Cr_ccX if targ_i.X<=4. 
DO REPEAT v_Cr = v_Cr1 TO v_Cr11 
     /targ_i = targ_i.1 TO targ_i.11 
     /v_Cr_cc = v_CR_cc1 TO v_CR_cc. 
    IF (targ_i<=4) v_Cr_cc = v_Cr. 
END REPEAT. 

COMPUTE v_CR_condmean = MEAN(v_Cr_cc1 TO v_Cr_cc11). 
EXECUTE. 
+0

謝謝!但它不工作,不知道爲什麼。創建了v_Cr_cc1到v_Cr_cc11,但沒有值被引入。我修正了第3行targ_i.11(out)後的時間段,並在第4行中將11添加到v_Cr_cc11。SPSS僅識別第一個TO。對於targ_i和V_Cr_cc,TO不會以紅色顯示,我還沒有弄清楚爲什麼...... – user5225119

+0

顯然,當我第一次評論咖啡時,咖啡並沒有被踢出去。(?!)它效果很好。感謝您快速回答 – user5225119

0

爲什麼不在COMPUTE中使用均值函數?您可以通過諸如mean.4(a到z)之類的內容來指定允許丟失多少個值。

+0

JKP,您可以詳細解釋一下嗎?計算平均值容忍SAME VARIABLE中缺失的設置限制,它正在檢索值以計算平均值。我經常使用它。我在這裏要求的是一個兩層決策過程:查看另一個變量,確定值是否未丟失,並且<= 4,然後查看第二組變量並檢索平均值計算的值。我想不出一種做外部循環/矢量或重複的方法。 – user5225119

+0

對不起,我錯過了。你仍然可以做到這一點,而不必重複寫出每個變量的條件,但因爲你不能在這種情況下使用TO,這將是非常乏味的。你也可以使用MATRIX解決這個問題。你可以使用Python來做到這一點,但在這種情況下沒有任何特別的優勢。 – JKP

+0

謝謝JKP!我肯定需要擴展我的一攬子技巧,所以當我遇到類似的問題時,我會記住這些......特別是「成長」並使用Python ;-) – user5225119