SPSS语法宏重复性

时间:2016-01-04 13:52:53

标签: loops macros statistics spss

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

  

Text:macro命令:FREQUENCIES
  在变量列表中指定了未定义的变量名称或临时变量或系统变量,该变量列表仅接受标准变量。检查拼写并验证此变量是否存在。   执行此命令停止。

然后说出以下内容:

  

错误#1。命令名称:文本
  该行中的第一个单词未被识别为SPSS Statistics命令。   执行此命令停止。

有趣的是,然后,所有输出都出现在它应该的确切位置。因此,我不应该抱怨,但这是非常令人不安的。我不明白为什么它不会在第一次出现任何错误,然后在后续尝试时给我错误。我在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  /.

3 个答案:

答案 0 :(得分:2)

在运行代码之前:

!comp_dich
    sx_rcps_cuneate_dtu_dich  /.

尝试使用SET MPRINT ON.作为前缀,即:

set mprint on.
!comp_dich
    sx_rcps_cuneate_dtu_dich  /.

然后,这应该有助于识别哪个语句极端导致问题,您将在输出中看到语句的打印返回,然后是错误消息。这个组合应该足以让你继续解决这个问题......

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

答案 1 :(得分:2)

尝试删除该行

* !comp_dich

自:

* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
* !comp_dich
* This macro/text replacement device/string parser performs some basic comparisons using
* a dichotomous variable.
* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

仅作为星号,遗憾的是没有注释掉宏调用,只有/*会注释掉。

答案 2 :(得分:0)

正如Jignesh正确评论的那样。对于最新的SPSS版本,这不是问题。但我认为值得尝试,因为对于较旧的SPSS版本来说这是一个问题。

据我所知,SPSS宏语法有一条规则:不要以宏名称结束一行。我猜这可能是错误的原因。尝试用两行重写FREQUENCIES命令。例如:

FREQUENCIES
    VARIABLES=!i /ORDER=ANALYSIS .

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