我有一组变量(A1,A2,B1,B2,C1,C3 .)我需要计算差异,以便最终创建一组Bland图,在使用OMS从t检验中提取差异的平均值和sd之后。
作为第一步,我让它处理单个变量(例如,A1和A2),现在我正在尝试创建一个宏,它将作为一个测试循环遍历前几对:
定义BlandAlt (scan1vars=!CMDEND / scan2vars=!CMDEND)
计算diff = scan1vars - scan2vars。
执行。
T检验
/TESTVAL=0
/MISSING=ANALYSIS
/VARIABLES=diff
/CRITERIA=CI(.95)。
!ENDDEFINE。
BlandAlt
scan1vars = JumpJumpHeightcm.1 JumpJumpHeightt_score.1 JumpMaxChangeinAccelerations3.1 JumpMaxChangeinAccelerationt_score.1 JumpMaxAcceleration2.1 JumpMaxAccelerationt_score.1
scan2vars= JumpJumpHeightcm.2 JumpJumpHeightt_score.2 JumpMaxChangeinAccelerations3.2 JumpMaxChangeinAccelerationt_score.2 JumpMaxAccelerations2.2 JumpMaxAccelerationt_score.2。
当我运行这个宏时,我会得到第一个变量的一个错误:
第35栏中的
错误# 4381。文本: JumpJumpHeightt_score.1表达式意外结束。此命令将停止执行。
当它试图运行t-测试时,它会发出警告:
文本: diff : T-TEST一个未定义的变量名,或者在变量list >中指定一个划痕或系统变量,它只接受标准变量。检查拼写并验证此变量是否存在。此命令将停止执行。
有人能帮我完成这个任务吗?我希望这样可以轻松地将其他命令包含在宏中。
发布于 2022-11-20 04:37:23
请参阅我的评论,以更正您原来的宏。在修正macru之后,它应该工作得很好,只是您没有使用宏调用的构建方式。你需要这样称呼它:
BlandAlt scan1vars = JumpJumpHeightcm.1 / scan2vars= JumpJumpHeightcm.2 .
BlandAlt scan1vars = JumpJumpHeightt_score.1 / scan2vars=JumpJumpHeightt_score.2 .
...这显然不是在你的变量列表中循环。SPSS宏的问题是很难让它同时循环两个列表。但是在您的例子中,没有必要--只有一个实际的列表要循环,同时让宏向变量名添加1或2后缀。试试这个:
DEFINE BlandAlt (vrs=!CMDEND)
!do !vr !in(!vrs)
COMPUTE diff = !concat(!vr,".1") - !concat(!vr,".2").
EXECUTE.
TTEST.....
!doend
!enddefine.现在,宏调用将如下所示:
BlandAlt vrs = JumpJumpHeightcm JumpJumpHeightt_score JumpMaxChangeinAccelerationms3
JumpMaxChangeinAccelerationt_score JumpMaxAccelerationms2 JumpMaxAccelerationt_score .发布于 2022-11-20 08:39:44
我还有另一个解决方案--把它放在一个单独的答案中,因为它使用的是完全不同的方法。这样做的想法是,有时可以通过将变量重组为long格式,然后使用split file只进行一次分析来获得相同的结果,而不是遍历变量进行分析。如下所示:
varstocases
make scan1vars from JumpJumpHeightcm.1 JumpJumpHeightt_score.1 JumpMaxChangeinAccelerationms3.1
JumpMaxChangeinAccelerationt_score.1 JumpMaxAccelerationms2.1 JumpMaxAccelerationt_score.1 /
make scan2vars from JumpJumpHeightcm.2 JumpJumpHeightt_score.2 JumpMaxChangeinAccelerationms3.2
JumpMaxChangeinAccelerationt_score.2 JumpMaxAccelerationms2.2 JumpMaxAccelerationt_score.2 /
index=origvar(scan1vars).
* now you can do the whole process only once.
COMPUTE diff = scan1vars - scan2vars.
sort cases by origvar.
split file by origvar.
T-TEST
/TESTVAL=0
/MISSING=ANALYSIS
/VARIABLES=diff
/CRITERIA=CI(.95).
split file off.https://stackoverflow.com/questions/74493524
复制相似问题