如何重新创建Excel';s";索引(,,Match())”;SPSS中的函数?

如何重新创建Excel';s";索引(,,Match())”;SPSS中的函数?,excel,indexing,match,spss,Excel,Indexing,Match,Spss,我正在尝试在SPSS中重新创建Excel的“Index(,,Match())”函数。我的数据组织如下: “位置”变量表示“值”变量中的值应位于哪一列(T:V) 在第一行中,位置的顺序为1-3,因此T:V列中的值与“值”变量的顺序相同 第二排的位置是2,3,1;所以“Value1”中的值应该放在U列(最后一组变量的第二列),“Value2”中的值应该放在V列,“value3”中的值应该放在T列,依此类推 在研究在SPSS中执行此操作后,SPSS的索引和匹配函数将不会有帮助 有没有Excel/SP

我正在尝试在SPSS中重新创建Excel的“Index(,,Match())”函数。我的数据组织如下:

“位置”变量表示“值”变量中的值应位于哪一列(T:V)

在第一行中,位置的顺序为1-3,因此T:V列中的值与“值”变量的顺序相同

第二排的位置是2,3,1;所以“Value1”中的值应该放在U列(最后一组变量的第二列),“Value2”中的值应该放在V列,“value3”中的值应该放在T列,依此类推

在研究在SPSS中执行此操作后,SPSS的索引和匹配函数将不会有帮助


有没有Excel/SPSS用户知道如何使用语法在SPSS中实现这一点?

可能有几种方法来解决这个问题,这取决于您处理的列数以及它们是否都是数字或是否有字符串(可能有矩阵代数的答案,我想不起来)

如果您只有3组3列,最简单的方法是编写9(3*3)If语句(您没有cols t/U/V的列名,所以我只是引用它们的Excel列):


这应该行得通。如果有更多的列,还可以使用向量循环来定义变量集。

这里有一种可扩展的方法:

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.

谢谢@Jay!当值变量为二进制(0,1)时,它工作得很好,但对其他值失败,因为any返回0或1。如何更改代码以返回值变量中的任何值?另一种方法是使用
varstocases
按位置排序数据,然后使用
casestovars
将其重新构造。感谢@bwarner。使用向量循环解决它。
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.