示例 (IF 命令)
具有数字值的 IF
IF (AGE > 20 AND SEX = 1) GROUP=2.
- 对于 AGE 大于 20 且 SEX 等于 1 的个案,数字变量 GROUP 设置为 2。
- 当表达式为 false 或缺少表达式时, GROUP 的值保持不变。 如果先前未定义 GROUP ,那么它包含系统缺失值。
具有字符串值的 IF
IF (SEX EQ 'F') EEO=QUOTA+GAIN.
- 逻辑表达式测试字符串变量 SEX 的值 F。
- 当表达式为 true (当 SEX 等于 F时) 时,将为数字变量 EEO 的值指定 QUOTA 加上 增益的值。 QUOTA 和 增益 都必须是先前定义的数字变量。
- 当表达式为 false 或 missing (例如,如果 SEX 等于 F) 时, EEO 的值保持不变。 如果先前未定义 EEO ,那么它包含系统缺失值。
具有算术运算的条件表达式
COMPUTE V3=0.
IF ((V1-V2) LE 7) V3=V1**2.
COMPUTE为 V3 分配值 0。- 逻辑表达式测试 V1 减 V2 是否小于或等于 7。 如果是这样,那么将为 V3 的值分配 V1 平方的值。 否则, V3 的值仍为 0。
具有算术运算和函数的条件表达式
IF (ABS(A-C) LT 100) INT=100.
IF检验变量 A 减去变量 C 的绝对值是否小于 100。 如果是,那么会为 INT 指定值 100。 否则,该值将保持不变。 如果先前未定义 INT ,那么它是系统缺失的。
检验缺失值
* Test for listwise deletion of missing values.
DATA LIST /V1 TO V6 1-6.
STRING SELECT(A1).
COMPUTE SELECT='V'.
VECTOR V=V1 TO V6.
LOOP #I=1 TO 6.
IF MISSING(V(#I)) SELECT='M'.
END LOOP.
BEGIN DATA
123456
56
1 3456
123456
123456
END DATA.
FREQUENCIES VAR=SELECT.
STRING使用A1格式创建字符串变量 SELECT ,COMPUTE将 SELECT 的值设置为 V。VECTOR将向量 V 定义为原始变量 V1 到 V6。 单个向量上的变量必须是所有数字变量或所有字符串变量。 在此示例中,由于向量 V 用作IF的MISSING函数的自变量,因此变量必须是数字 (MISSING不可用于字符串变量)。- 循环结构执行六次: 对每个
VECTOR元素执行一次。 如果缺少任何元素的值,那么SELECT设置为等于 M。 实际上,如果任何观测值缺少任何变量 V1 到 V6的值,那么SELECT将设置为 M。 FREQUENCIES生成SELECT的频率表。 此表提供了至少一个变量具有缺失值的个案数以及所有变量具有有效值的个案数的计数。 此表可用于确定将从使用成列删除缺失值的分析中删除的个案数。
示例
IF YRHIRED LT 1980 RATE=0.02.
IF DEPT='SALES' DIVISION='TRANSFERRED'.
- 第一个
IF命令上的逻辑表达式测试 YR雇 是否小于 1980 (1980 年之前雇佣)。 如果是这样,那么变量 RATE 将设置为 0.02。 - 第二个
IF命令上的逻辑表达式用于测试 DEPT 是否等于 SALES。 当条件为 true 时,字符串变量 DIVISION 的值将更改为 调动 ,但如果 DIVISION 的格式不超过 11 个字符,那么将截断该值。 对于任何其他值 DEPT, DIVISION 的值保持不变。 - 虽然有两个
IF语句,但每个语句都定义了单独的独立条件。 将使用IF命令而不是DO IF—END IF结构,以便在每个案例上测试这两个条件。 如果使用DO IF—END IF,那么只要满足第一个逻辑条件,控件就会从结构中传递出去。
示例
IF (STATE EQ 'IL' AND CITY EQ 13) COST=1.07 * COST.
- 逻辑表达式测试 STATE 是否等于 IL 和 CITY 是否等于 13。
- 如果逻辑表达式为 true ,那么数字变量 COST 将增加 7%。
- 对于任何其他值 STATE 或 CITY, COST 的值保持不变。
示例
STRING GROUP (A18).
IF (HIRED GE 1988) GROUP='Hired after merger'.
STRING声明字符串变量 GROUP 并为其分配 18 个字符的宽度。- 当 出租 大于或等于 1988 时,将为 GROUP 分配值 合并后雇佣。 当 雇 小于 1988 时, GROUP 将保留为空白。
示例
IF (RECV GT DUE OR (REVNUES GE EXPNS AND BALNCE GT 0))STATUS='SOLVENT'.
- 首先,程序测试 REVNUES 是否大于或等于 EXPNS 以及 BALNCE 是否大于 0。
- 其次,程序评估 RECV 是否大于 DUE。
- 如果其中任一表达式为 true ,那么会为 STATUS 指定值 溶剂。
- 如果这两个表达式都为 false ,那么 STATUS 保持不变。
- STATUS 是活动数据集中的现有字符串变量。 否则,必须在先前的
STRING命令上对其进行声明。