命令顺序
命令顺序通常是常识问题,并遵循以下逻辑顺序: 变量定义,数据转换和统计分析。 例如,在变量存在之前,不能以任何方式对其进行标签,变换,分析或使用。 以下一般规则适用:
- 用于为会话 (
DATA LIST,GET,GET DATA,MATRIX DATA等) 定义变量的命令 必须在将标签或缺失值指定给这些变量的命令之前; 它们还必须在使用这些变量的变换和过程命令之前。 - 变换命令 (
IF,COUNT,COMPUTE等) 用于创建和修改变量的命令必须先于为这些变量指定标签或缺失值的命令,并且还必须先于使用这些变量的过程。 - 通常,命令处理的逻辑结果确定命令顺序。 例如,在活动数据集中创建新变量的过程必须在使用这些新变量的过程之前。
除了遵守上述规则外,通常还需要区分导致读取数据的命令和不读取数据的命令,以及使用下一个读取数据的命令存储暂挂执行的命令和不需要读取数据而立即生效的命令。
- 导致读取数据以及执行暂挂变换的命令包括所有统计过程 (例如,
CROSSTABS,FREQUENCIES,REGRESSION); 一些用于保存/写入活动数据集内容的命令 (例如,DATASET COPY,SAVE TRANSLATE,SAVE);AGGREGATE,AUTORECODE,EXECUTE,RANK和SORT CASES。 - 存储的命令 (使用下一个读取数据的命令暂挂执行) 包括修改或创建新数据值的变换命令 (例如,
COMPUTE,RECODE) ,定义条件操作的命令 (例如,DO IF,IF,SELECT IF) ,PRINT,WRITE和XSAVE。 有关这些命令的综合列表,请参阅 存储的命令,暂挂执行 。 - 在不读取数据或执行暂挂命令的情况下立即生效的命令包括在不影响数据值 (例如,
MISSING VALUES,VALUE LABELS) 的情况下更改字典信息的变换以及不需要活动数据集的命令 (例如,DISPLAY,HOST,INSERT,OMS,SET)。 除了立即生效外,这些命令也是无条件处理的。 例如,如果包含在DO IF结构中,那么无论是否满足条件,都将运行这些命令。 有关这些命令的综合列表,请参阅 立即生效的命令 。
示例
DO IF expense = 0.
- COMPUTE profit=-99.
- MISSING VALUES expense (0).
ELSE.
- COMPUTE profit=income-expense.
END IF.
LIST VARIABLES=expense profit.
COMPUTE先于MISSING VALUES,先进行处理; 但是,将延迟执行,直到读取数据为止。MISSING VALUES一迂到就生效, 即使从未满足条件 (即,即使不存在 expense=0的情况)。LIST导致读取数据; 因此,将在同一数据传递期间执行COMPUTE和LIST。- 由于此时
MISSING VALUES已生效,因此将永远不会满足DO IF结构中的第一个条件,因为 0 的 费用 值被视为缺失,因此当 费用 为 0 时,该条件将求值为缺失。