【问题标题】:SPSS macro commandSPSS宏命令
【发布时间】:2015-04-28 09:28:56
【问题描述】:

我需要在 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_X”。

我必须对 15 个变量执行此操作,所以虽然我可以将它们全部输入,但我认为有一些代码可以简化它?

【问题讨论】:

    标签: macros spss


    【解决方案1】:

    这是一个演示如何将其包装到 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 来解决这个问题,这在这种情况下更加动态和灵活。

    【讨论】:

    • 我已更新我的帖子以使用 DO IF 而不是 IF 来测试逻辑条件,因为这比每次在所有情况下重复测试 IF 条件要快。
    • 在我看来,您缺少嵌套在“!else”宏语句下方的“ELSE IF”语句。在给multiple places的人回答的时候也可以提一下,所以没有人重复已经做出的努力。
    • 谢谢安迪。我对其进行了编码,使其重复评估 DO IF / END IF,而不是在第一次迭代中,DO IF 之后是 ELSE IF。我已经更新了帖子。
    【解决方案2】:

    我想知道。当 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.
    

    【讨论】:

    • 关闭!很接近!但这行不通,因为例如,当 Event_Duration=2 时,您只想对 Activity1 和 Activity2 求和,而不是在您的情况下 Activity1 到 Activity119?如果 Event_Duration=2 时只有 Activity1 和 Activity2 具有有效数据并且所有其他活动变量都缺失,那么您的方法将起作用,因此取决于数据的质量和结构。
    【解决方案3】:

    DEFINE !SPGrid (ID=!Default(respid) !TOKENS(1)/ 代码 = !TOKENS(1000)/ N = !TOKENS(1)/ 问题 = !TOKENS(1000)) COUNT QCount = !Question (!Codes)。 执行。 暂时的。 选择 IF (QCount!N)。 LIST !ID !问题。 !ENDDEFINE。

    !SPGrid 代码=1,2,3,4 N=15 Question=Q1r1 Q1r2 Q1r3 Q1r4 Q1r5 Q1r6 Q1r7 Q1r8 Q1r9 Q1r10 Q1r11 Q1r12 Q1r13 Q1r14 Q1r15。

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多