SPSS宏命令

时间:2015-04-28 09:28:56

标签: macros spss

我需要在SPSS中运行以下内容:

if (event_duration = 0) Acti_Activity = Activity.
if (event_duration = 1) Acti_Activity = MEAN (Activity, Activity_1).
if (event_duration = 2) Acti_Activity = MEAN (Activity, Activity_1, Activity_2).

......一直到......

if (event_duration = 120) Acti_Activity = MEAN 
(Activity, Activity_1, Activity_2, Activity_3, Activity_4, Activity_5, Activity_6, Activity_7, Activity_8, Activity_9, Activity_10, 
Activity_11, Activity_12, Activity_13, Activity_14, Activity_15, Activity_16, Activity_17, Activity_18, Activity_19..... ,Activity_120

基本上,我需要一个宏“如果event_duration = X,则将Activity变量表示为Activity_X”。

我必须在15个变量上执行此操作,所以尽管我可以全部输入它,但我假设有一些代码可以简化它吗?

2 个答案:

答案 0 :(得分:4)

这里有一个演示如何将其包装到SPSS DEFINE-!ENDDEFINE宏中,我已经参数化了N = 120但你也可以参数化你需要运行它的15个不同的变量也。我会把它留给你去适应。

define !RunJob(n=!cmdend)

!do !i = 0 !to !n
    !if (!i=0) !then
        do  if (event_duration = !i).
            compute Acti_Activity =Acti_Activity.
    !ifend
    !if (!i>0) !then
        else if (event_duration = !i).
            compute Acti_Activity =MEAN(Acti_Activity to !concat("Acti_Activity_",!i)).
    !ifend

!doend
end if.      

!enddefine.

set mprint on.
!RunJob n=120.

如果由于某种原因,您的变量不是连续的顺序,或者说Activity_15不存在于数据中,则此方法将失败并在遇到错误时停止。如果是这样,那么你可能想要使用Python Programmability来解决这个问题,在这种情况下,它更具动态性和灵活性。

答案 1 :(得分:0)

我在想。当event_duration等于0表示变量Activity_1到Activity_119都为零,当event_duration等于1时,表示Activity_2到Activity_119为零,依此类推,你也可以使用更简单的东西。

compute Acti_Activity = SUM(Activity to Activity119) / (event_duration + 1).
execute.
相关问题