示例 (DEFINE-!ENDDEFINE 命令)

示例

* Macro without arguments: Specify a group of variables.
 
DEFINE sesvars ()
   age sex educ religion
!ENDDEFINE.
 
FREQUENCIES VARIABLES=sesvars.
  • 宏名称为 sesvars。 因为括号为空,所以 sesvars 没有自变量。 宏主体定义四个变量: age sex educ宗教信仰
  • 宏调用是在 FREQUENCIES上指定的。 执行调用时, sesvars 将展开为变量 age sex educ宗教
  • 在宏扩展之后,将执行 FREQUENCIES

示例

* Macro without arguments: Repeat a sequence of commands.
 
DATA LIST FILE = MAC4D /GROUP 1   REACTIME 3-5 ACCURACY 7-9.
VALUE LABELS GROUP    1'normal'
                      2'learning disabled'.
* Macro definition.
DEFINE check ()
split file by group.
frequencies variables = reactime accuracy
  /histogram.
descriptives reactime accuracy.
list.
split file off.
regression variables = group reactime accuracy
  /dependent = accuracy
  /enter
  /scatterplot (reactime, accuracy).
!ENDDEFINE.

check.                       /* First call of defined macro check

COMPUTE REACTIME = SQRT (REACTIME).
COMPUTE ACCURACY = SQRT (ACCURACY).

check.                       /* Second call of defined macro check

COMPUTE REACTIME = lg10 (REACTIME * REACTIME).
COMPUTE ACCURACY = lg10 (ACCURACY * ACCURACY).

check.                       /* Third call of defined macro check
  • 宏的名称为 check。 空括号指示宏没有自变量。
  • 宏定义 (介于 DEFINE!ENDDEFINE之间) 包含要重复的命令序列: SPLIT FILEFREQUENCIESDESCRIPTIVESLISTSPLIT FILEREGRESSION
  • 宏被称为三次。 每次迂到 check 时,都会将其替换为命令序列 SPLIT FILEFREQUENCIESDESCRIPTIVESLISTSPLIT FILE OFFREGRESSION。 使用宏工具的命令序列与明确声明指定命令三次的命令序列相同。

示例

* Macro with an argument.
 
DEFINE myfreq (vars = !CHAREND('/'))
frequencies variables = !vars
  /format = notable
  /statistics = default skewness kurtosis.
!ENDDEFINE.
 
myfreq vars = age sex educ religion /.
  • 宏定义将 vars 定义为宏自变量。 在宏调用中,将四个变量指定为宏 myfreq的自变量。 当程序展开 myfreq 宏时,它将替换 !vars 的自变量 agesexeducreligion,并执行生成的命令。