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 .

最新更新