在 SPSS 中对数据进行排序和线性插值的循环

Loop for sorting and linear interpolating data in SPSS

我经常在按另一个变量对数据排序后使用线性插值替换 SPSS 中的缺失值。例如,我可以使用名为 Var_A_Sort 的列对数据进行排序,然后在名为 Var_A 的列中线性插入缺失值。然后,我通过使用名为 Var_B_Sort 的列对数据进行排序并在名为 Var_B 的列中线性插入缺失值来重复该过程,依此类推。以下是我用来完成该过程的语法。

SORT CASES BY Var_A_Sort (A).
EXECUTE.

RMV
 /Var_A=LINT(Var_A).
EXECUTE.  

SORT CASES BY Var_B_Sort (A).
EXECUTE.

RMV
 /Var_B=LINT(Var_B).
EXECUTE. 

我经常使用 SPSS 中的宏为列表中的变量重复任务(如下例)。但是我不确定如何在 SPSS 语法中创建宏或在 Python 中编写代码,这些代码可用于完成上述任务。

DEFINE !RegLoop (Ylist = !CMDEND)
!DO !Y !IN(!Ylist)

    RMV
     /!Y=LINT(!Y).
    EXECUTE. 

!DOEND
!ENDDEFINE.

!RegLoop Ylist = Var_A Var_B.

在宏中使用!concat即可解决问题。 如果您这样定义宏,则可以保留原始宏调用:

DEFINE !RegLoop (Ylist = !CMDEND)
!DO !Y !IN(!Ylist)
SORT CASES BY !concat(!Y, "_Sort") (A).
RMV / !Y = LINT( !Y ).
!DOEND
EXECUTE. 
!ENDDEFINE.

!RegLoop Ylist = var_A var_B .

但您可以使用 !concat 编写具有更复杂变量名的更灵活的宏。例如:

DEFINE !RegLoop (Ylist = !CMDEND)
!DO !Y !IN(!Ylist)
SORT CASES BY !concat("Var_", !Y, "_Sort") (A).
RMV / !concat("Var_", !Y) = LINT( !concat("Var_", !Y) ).
!DOEND
EXECUTE. 
!ENDDEFINE.

!RegLoop Ylist = A B .