Loops SPSS语法宏可重复性

Loops SPSS语法宏可重复性,loops,macros,statistics,spss,Loops,Macros,Statistics,Spss,我很高兴被介绍到SPSS宏。我使用的正是那里建议的代码。请参见下面的示例。我在2015年12月26日运行了这段代码,它的执行非常完美。然后,我对语法文件的其他部分进行了更改。我没有更改下面代码中的一个字符。今天我尝试再次运行所有程序,但遇到了一个非常奇怪的问题。SPSS对每个子程序的说明如下: 文本:宏命令:频率 在仅接受标准变量的变量列表中指定了未定义的变量名、临时变量或系统变量。检查拼写并验证此变量是否存在。 停止执行此命令 它接着说: 错误#1。命令名:text 行中的第一个单词不能识别为

我很高兴被介绍到SPSS宏。我使用的正是那里建议的代码。请参见下面的示例。我在2015年12月26日运行了这段代码,它的执行非常完美。然后,我对语法文件的其他部分进行了更改。我没有更改下面代码中的一个字符。今天我尝试再次运行所有程序,但遇到了一个非常奇怪的问题。SPSS对每个子程序的说明如下:

文本:宏命令:频率
在仅接受标准变量的变量列表中指定了未定义的变量名、临时变量或系统变量。检查拼写并验证此变量是否存在。 停止执行此命令

它接着说:

错误#1。命令名:text
行中的第一个单词不能识别为SPSS统计命令。 停止执行此命令

有趣的是,所有的输出都出现在它应该出现的地方。因此,我不应该抱怨,但这是非常令人不安的。我不明白为什么它第一次不给我任何错误,然后在以后的尝试中给我错误。我正在MacOS10.8.5上使用SPSS19

* 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宏语法有一条规则:不要以宏名称结束一行。我猜这可能是一个错误的原因。试着重写两行中的频率comand。例如:

FREQUENCIES
    VARIABLES=!i /ORDER=ANALYSIS .

这是我的猜测,因为我没有可用的数据来测试它。

在运行代码之前:

!comp_dich
    sx_rcps_cuneate_dtu_dich  /.
尝试使用
将MPRINT设置为ON作为前缀。
即:

set mprint on.
!comp_dich
    sx_rcps_cuneate_dtu_dich  /.
这将有助于确定extacly导致问题的语句,您将在输出中看到该语句的打印回,后面是错误消息。这个组合应该给你足够的时间继续隔离问题

根据您描述的错误消息,可能是数据中不存在指定的变量,或者存在其他语法错误。

尝试删除该行

* !comp_dich
发件人:


不幸的是,只有星号不能注释掉宏调用,只有
/*
注释掉宏调用

我不认为有你在这里描述的规则,所以我不认为这是代码失败的地方。我不再是SPSS用户了。但我记得这对于旧版本的SPSS来说是个问题。我无法用SPSS 20重现该问题(已修复)。我现在没有任何旧版本的SPSS。这个潜在的解决方案没有改变结果。你在输出中看到频率表了吗?首先,变量名应该出现的地方出现了“宏”一词。当然,这不是一个定义的变量。然而,正如我在最初的文章中提到的,代码然后使用变量名按预期运行。非常非常奇怪。请提供extact错误消息以及之前被认为是导致错误的命令。您是天才。
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
* !comp_dich
* This macro/text replacement device/string parser performs some basic comparisons using
* a dichotomous variable.
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX