2016-11-10 67 views
1

我正在嘗試在SPSS中重新創建Excel的「索引(,,匹配())」函數。我的數據的組織結構如下:如何在SPSS中重新創建Excel的「Index(,, Match())」函數?

enter image description here

「位置」變量指示哪一列(T:V)在「值」變量的值應該去。

在第一行中,位置是爲了1-3,所以在列T中的值:V爲以相同的順序爲「值」的變量。

在第二行中的位置是2,3,1;所以「Value1」中的值應該在U列(最後一個變量塊中的第二列)中出現,「Value2」中的值應該出現在列V中,而「Value 3」中的值應該出現在列T中。等等。

尋找到在SPSS這樣做了以後,SPSS人指數和匹配功能也無濟於事。

做任何的Excel/SPSS用戶都知道如何在SPSS語法做到這一點?

回答

1

可能有幾種方法可以解決這個問題,具體取決於你處理的列數以及它們是全數字還是有字符串(這可能是一個矩陣代數的答案,我想不出來)。

如果你只有3套3列,最簡單的方法是寫9(3×3)if語句(你不具備的cols T/U/V列名,所以我只是參考他們的Excel專欄):

if (Position1 = 1) T = Value1. 
if (Position1 = 2) T = Value2. 
if (Position1 = 3) T = Value3. 
if (Position2 = 1) U = Value1. 
if (Position2 = 2) U = Value2. 
... 

這應該工作。如果您有更多的列,您也可以使用矢量循環來定義變量集。

+0

感謝@bwarner。用矢量循環解決它。 – RTrain3k

1

這裏有一個可擴展的方法:

vector match(3). 
do repeat p = position1 to position3/v= value1 to value3/y = #y1 to #y3. 
compute y = v*p. 
end repeat. 
loop #i = 1 to 3. 
compute match(#i) = any(#i, #y1 to #y3). 
end loop. 
exe. 
+0

謝謝@Jay!當值變量是二進制(0,1)時,它工作正常,但是與其他值失敗,因爲任何返回0或1.如何更改代碼以返回值變量中的任何值? – RTrain3k

+0

另一種方法是使用'varstocases'按位置對數據進行重組,然後用'casestovars'重新構造它。 – Jay