Macros 通过宏的SPSS CTables

Macros 通过宏的SPSS CTables,macros,spss,Macros,Spss,我不熟悉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 /

我不熟悉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. 

非常感谢您的帮助-未提供示例数据。只需要一个正确方向的提示。

的文档指南一开始可能会有点吓人,因此要理解它的所有功能,最好先用一些示例

我在下面分享三个例子,这些例子应该会给你一些可能出错的地方的指示:

GET FILE="C:\Program Files\IBM\SPSS\Statistics\24\Samples\English\Employee data.sav".

/* Example1: Using macro as a global string substitution for variable names */.
DEFINE !MyMac1 () educ jobcat !ENDDEFINE.
FREQ !MyMac1.


/* Example2: Having command in the body of macro with variable input as an argument */.
/* Result: Notice only single FREQ command is run with two variables */.

DEFINE !MyMac2 (VARS=!CMDEND).
SET MPRINT ON.
FREQ !VARS.
SET MPRINT OFF.
!ENDDEFINE.
!MyMac2 vars=educ jobcat.


/* Example3: Having command in the body of macro with variable input as an argument */
/* but looping over each variable */.
/* Result: Notice two separate FREQ commands are run */.
/* with one variable each, i.e. looped for each variable */.

DEFINE !MyMac3 (VARS=!CMDEND).
SET MPRINT ON.
!DO !I !IN (!VARS)
FREQ !i.
!DOEND
SET MPRINT OFF.
!ENDDEFINE.
!MyMac3 vars=educ jobcat.

DEFINE/ENDDEFINE
的功能可以以多种方式使用。一旦你对它们都有了一定的了解,你很快就会形成一种特定的宏编码风格。如果您是第一次学习SPSS宏,并且对Python有一定的了解(或兴趣),那么我建议您不要开始学习SPSS宏的旅程,而是学习Python,因为使用Python编写代码(还有许多其他好处),这种类型的宏构建效率更高(也更有趣!)。

首先,如果使用名称“
!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 F6 F7 F8 F9.
现在,您可以调用宏为每个变量创建一个表,例如:

!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.
现在调用宏:

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 F6 F7 F8 F9.

注意:对于宏循环,您不能使用“
F5到F9
”,您必须像我的示例中那样单独列出所有变量。

非常感谢您提供的示例,我一定要熟悉语法和宏逻辑。。。。