SPSS 语法宏可重复性
SPSS Syntax Macros Repeatability
我很高兴 this question 向我介绍了 SPSS 宏。我正在使用那里建议的确切代码。请参阅下面的示例。我在 2015 年 12 月 26 日 运行 这段代码,它执行得很完美。然后我对语法文件的其他部分进行了更改。我没有更改下面代码中的一个字符。我今天再次尝试 运行 一切,但我遇到了一个非常棘手的 运行ge 问题。 SPSS 为每个子程序说类似以下内容:
Text: macro Command: FREQUENCIES
An undefined variable name, or a scratch or system variable was specified in a variable list which accepts only standard variables. Check spelling and verify the existence of this variable.
Execution of this command stops.
它接着说:
Error # 1. Command name: text
The first word in the line is not recognized as an SPSS Statistics command.
Execution of this command stops.
有趣的是,所有输出都出现在它应该出现的确切位置。因此,我不应该抱怨,但这是非常令人不安的。我不明白为什么它不会第一次给出任何错误,然后在随后的尝试中给我错误。我在 Mac OS 10.8.5.
上使用 SPSS 19
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
* Wakefulness condition.
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
USE ALL .
COMPUTE filter_$=(include_analysis = 1 & group_rand = 0) .
FILTER BY filter_$ .
EXECUTE .
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
* !comp_dich
* This macro/text replacement device/string parser performs some basic comparisons using
* a dichotomous variable.
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
DEFINE !comp_dich (!POS !CHAREND('/'))
!DO !i !IN (!1)
FREQUENCIES
VARIABLES=!i
/ORDER=ANALYSIS .
CROSSTABS
/TABLES=!i BY gender
/FORMAT=AVALUE TABLES
/STATISTICS=MCNEMAR
/CELLS=COUNT EXPECTED ROW COLUMN TOTAL
/COUNT ROUND CELL .
CROSSTABS
/TABLES=!i BY vis_train
/FORMAT=AVALUE TABLES
/STATISTICS=MCNEMAR
/CELLS=COUNT EXPECTED ROW COLUMN TOTAL
/COUNT ROUND CELL .
T-TEST GROUPS=!i(0 1)
/MISSING=ANALYSIS
/VARIABLES=/*
age/*
dose/*
t_l_mean_am/*
t_l_mean_pm/*
threshold_am/*
threshold_pm/*
diff_thresh/*
TDT_defaults_am/*
TDT_defaults_pm/*
TTC_am/*
TTC_pm/*
full_wake/*
full_N1/*
full_N2/*
full_N3/*
full_REM/*
full_tst/*
full_trt/*
scan_wake/*
scan_N1/*
scan_N2/*
scan_N3/*
scan_REM/*
scan_tst/*
scan_trt/*
peak_wake/*
peak_N1/*
peak_N2/*
peak_N3/*
peak_REM/*
peak_tst/*
peak_trt/*
weigh_sws/*
/CRITERIA=CI(.95) .
!DOEND
!ENDDEFINE .
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
* I call the !comp_dich macro/text replacement device/string parser.
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
!comp_dich
sx_rcps_cuneate_dtu_dich /.
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
* Sleep condition.
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
USE ALL .
COMPUTE filter_$=(include_analysis = 1 & group_rand = 1) .
FILTER BY filter_$ .
EXECUTE .
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
* I call the !comp_dich macro/text replacement device/string parser.
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
!comp_dich
sx_rcps_cuneate_dtu_dich /.
正如 Jignesh 正确评论的那样。对于最新的 SPSS 版本,这不是问题。但我相信值得一试,因为这是旧版 SPSS 的问题。
据我所知,SPSS 宏语法有一条规则:不要以宏名称结束一行。我猜这可能是错误的原因。尝试用两行重写 FREQUENCIES 命令。例如:
FREQUENCIES
VARIABLES=!i /ORDER=ANALYSIS .
这是我的猜测,因为我没有可用于测试的数据。
在您 运行 代码之前:
!comp_dich
sx_rcps_cuneate_dtu_dich /.
尝试用 SET MPRINT ON.
作为前缀,即:
set mprint on.
!comp_dich
sx_rcps_cuneate_dtu_dich /.
这应该有助于确定究竟是哪个语句导致了问题,您将在输出中看到该语句的打印回,后跟错误消息。该组合应该足以让您继续隔离问题...
根据您描述的错误消息,很可能是指定的变量在数据中不存在,或者存在其他语法错误。
尝试删除行
* !comp_dich
发件人:
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
* !comp_dich
* This macro/text replacement device/string parser performs some basic comparisons using
* a dichotomous variable.
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
不幸的是,星号本身并不能注释掉宏调用,只有 /*
可以。
我很高兴 this question 向我介绍了 SPSS 宏。我正在使用那里建议的确切代码。请参阅下面的示例。我在 2015 年 12 月 26 日 运行 这段代码,它执行得很完美。然后我对语法文件的其他部分进行了更改。我没有更改下面代码中的一个字符。我今天再次尝试 运行 一切,但我遇到了一个非常棘手的 运行ge 问题。 SPSS 为每个子程序说类似以下内容:
Text: macro Command: FREQUENCIES
An undefined variable name, or a scratch or system variable was specified in a variable list which accepts only standard variables. Check spelling and verify the existence of this variable. Execution of this command stops.
它接着说:
Error # 1. Command name: text
The first word in the line is not recognized as an SPSS Statistics command. Execution of this command stops.
有趣的是,所有输出都出现在它应该出现的确切位置。因此,我不应该抱怨,但这是非常令人不安的。我不明白为什么它不会第一次给出任何错误,然后在随后的尝试中给我错误。我在 Mac OS 10.8.5.
上使用 SPSS 19* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
* Wakefulness condition.
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
USE ALL .
COMPUTE filter_$=(include_analysis = 1 & group_rand = 0) .
FILTER BY filter_$ .
EXECUTE .
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
* !comp_dich
* This macro/text replacement device/string parser performs some basic comparisons using
* a dichotomous variable.
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
DEFINE !comp_dich (!POS !CHAREND('/'))
!DO !i !IN (!1)
FREQUENCIES
VARIABLES=!i
/ORDER=ANALYSIS .
CROSSTABS
/TABLES=!i BY gender
/FORMAT=AVALUE TABLES
/STATISTICS=MCNEMAR
/CELLS=COUNT EXPECTED ROW COLUMN TOTAL
/COUNT ROUND CELL .
CROSSTABS
/TABLES=!i BY vis_train
/FORMAT=AVALUE TABLES
/STATISTICS=MCNEMAR
/CELLS=COUNT EXPECTED ROW COLUMN TOTAL
/COUNT ROUND CELL .
T-TEST GROUPS=!i(0 1)
/MISSING=ANALYSIS
/VARIABLES=/*
age/*
dose/*
t_l_mean_am/*
t_l_mean_pm/*
threshold_am/*
threshold_pm/*
diff_thresh/*
TDT_defaults_am/*
TDT_defaults_pm/*
TTC_am/*
TTC_pm/*
full_wake/*
full_N1/*
full_N2/*
full_N3/*
full_REM/*
full_tst/*
full_trt/*
scan_wake/*
scan_N1/*
scan_N2/*
scan_N3/*
scan_REM/*
scan_tst/*
scan_trt/*
peak_wake/*
peak_N1/*
peak_N2/*
peak_N3/*
peak_REM/*
peak_tst/*
peak_trt/*
weigh_sws/*
/CRITERIA=CI(.95) .
!DOEND
!ENDDEFINE .
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
* I call the !comp_dich macro/text replacement device/string parser.
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
!comp_dich
sx_rcps_cuneate_dtu_dich /.
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
* Sleep condition.
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
USE ALL .
COMPUTE filter_$=(include_analysis = 1 & group_rand = 1) .
FILTER BY filter_$ .
EXECUTE .
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
* I call the !comp_dich macro/text replacement device/string parser.
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
!comp_dich
sx_rcps_cuneate_dtu_dich /.
正如 Jignesh 正确评论的那样。对于最新的 SPSS 版本,这不是问题。但我相信值得一试,因为这是旧版 SPSS 的问题。
据我所知,SPSS 宏语法有一条规则:不要以宏名称结束一行。我猜这可能是错误的原因。尝试用两行重写 FREQUENCIES 命令。例如:
FREQUENCIES
VARIABLES=!i /ORDER=ANALYSIS .
这是我的猜测,因为我没有可用于测试的数据。
在您 运行 代码之前:
!comp_dich
sx_rcps_cuneate_dtu_dich /.
尝试用 SET MPRINT ON.
作为前缀,即:
set mprint on.
!comp_dich
sx_rcps_cuneate_dtu_dich /.
这应该有助于确定究竟是哪个语句导致了问题,您将在输出中看到该语句的打印回,后跟错误消息。该组合应该足以让您继续隔离问题...
根据您描述的错误消息,很可能是指定的变量在数据中不存在,或者存在其他语法错误。
尝试删除行
* !comp_dich
发件人:
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
* !comp_dich
* This macro/text replacement device/string parser performs some basic comparisons using
* a dichotomous variable.
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
不幸的是,星号本身并不能注释掉宏调用,只有 /*
可以。