我是SPSS宏的新手。我打算自动化CTables生产。在ctables中,除了变量外,其他所有内容都相同。
我的命令是:
CTABLES
/VLABELS VARIABLES=usevar anzahl gesamt F0passthrough DISPLAY=LABEL
/TABLE usevar [C][COLPCT.VALIDN '' PCT40.1] + anzahl [C][COUNT '' F40.0] BY gesamt + F0passthrough
/SLABELS POSITION=ROW
/CATEGORIES VARIABLES=usevar anzahl ORDER=A KEY=VALUE EMPTY=INCLUDE
/CATEGORIES VARIABLES=gesamt F0passthrough ORDER=A KEY=VALUE EMPTY=EXCLUDE.
filter off.
usevar是我旨在与宏交换的变量。 (例如,我的变量是F5 F6 F7)
所以我尝试了:
DEFINE !usevar()
F1 F5
!ENDDEFINE.
CTABLES
/VLABELS VARIABLES=usevar anzahl gesamt F0passthrough DISPLAY=LABEL
/TABLE usevar [C][COLPCT.VALIDN '' PCT40.1] + anzahl [C][COUNT '' F40.0] BY gesamt + F0passthrough
/SLABELS POSITION=ROW
/CATEGORIES VARIABLES=usevar anzahl ORDER=A KEY=VALUE EMPTY=INCLUDE
/CATEGORIES VARIABLES=gesamt F0passthrough ORDER=A KEY=VALUE EMPTY=EXCLUDE.
filter off.
非常感谢您的帮助-没有提供示例数据。只需向正确的方向提示即可。
最佳答案
首先,如果您使用“!usevar
”名称定义宏,则必须在语法中使用相同的名称-“usevar
”将不起作用。
无论如何,我建议对宏使用另一种方法:
define !MyCtabMacro (!pos=!cmdend)
CTABLES
/VLABELS VARIABLES=!1 anzahl gesamt F0passthrough DISPLAY=LABEL
/TABLE !1 [C][COLPCT.VALIDN '' PCT40.1] + anzahl [C][COUNT '' F40.0] BY gesamt + F0passthrough
/SLABELS POSITION=ROW
/CATEGORIES VARIABLES=!1 anzahl ORDER=A KEY=VALUE EMPTY=INCLUDE
/CATEGORIES VARIABLES=gesamt F0passthrough ORDER=A KEY=VALUE EMPTY=EXCLUDE.
filter off.
!enddefine.
现在,您可以调用宏为每个变量创建一个表,例如:
!MyCtabMacro F5.
!MyCtabMacro F6.
如果要对许多变量执行此操作,则可以让宏在它们之间循环:
define !MyCtabMacro (!pos=!cmdend)
!do !onevar !in(!1)
CTABLES
/VLABELS VARIABLES=!onevar anzahl gesamt F0passthrough DISPLAY=LABEL
/TABLE !onevar [C][COLPCT.VALIDN '' PCT40.1] + anzahl [C][COUNT '' F40.0] BY gesamt + F0passthrough
/SLABELS POSITION=ROW
/CATEGORIES VARIABLES=!onevar anzahl ORDER=A KEY=VALUE EMPTY=INCLUDE
/CATEGORIES VARIABLES=gesamt F0passthrough ORDER=A KEY=VALUE EMPTY=EXCLUDE.
filter off.
!doend
!enddefine.
现在调用宏:
!MyCtabMacro F5 F6 F7 F8 F9.
注意:对于宏循环,您不能使用“
F5 to F9
”,您必须像我的示例一样单独列出所有变量。关于macros - 通过宏的SPSS CTables,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41698640/