Expresiones lógicas
Las expresiones lógicas pueden aparecer en los mandatos COMPUTE
, IF
, SELECT IF
, DO IF
, ELSE IF
, LOOP IF
y END LOOP IF
. Una expresión lógica se evalúa como verdadera o falsa, o como que falta si es indeterminada. Una expresión lógica devuelve 1 si la expresión es verdadera, 0 si es falsa o falta el sistema si falta. Por lo tanto, las expresiones lógicas pueden ser cualquier expresión que produzca esta lógica de tres valores.
- La expresión lógica más simple es una variable lógica. Una variable lógica es cualquier variable numérica que tenga los valores 1, 0 o perdidos del sistema. Las variables lógicas no pueden ser series.
- Las expresiones lógicas pueden ser simples variables lógicas o relaciones, o pueden ser pruebas lógicas complejas que implican variables, constantes, funciones, operadores relacionales, operadores lógicos y paréntesis para controlar el orden de evaluación.
- En un mandato
IF
, una expresión lógica que es verdadera hace que se ejecute la expresión de asignación. Una expresión lógica que devuelve que falta tiene el mismo efecto que una que es falsa, es decir, la expresión de asignación no se ejecuta y el valor de la variable de destino no se altera. - En un mandato
DO IF
, una expresión lógica que es verdadera provoca la ejecución de los mandatos inmediatamente después deDO IF
, hasta el siguienteELSE IF
,ELSE
oEND IF
. Si es false, se evalúa el siguiente mandatoELSE IF
oELSE
. Si la expresión lógica devuelve que falta para cada uno de ellos, se omite toda la estructura. - En un mandato
SELECT IF
, una expresión lógica que es verdadera hace que se seleccione el caso. Una expresión lógica que devuelve perdidos tiene el mismo efecto que una que es falsa, es decir, el caso no está seleccionado. - En un mandato
LOOP IF
, una expresión lógica que es verdadera hace que el bucle empiece (o continúe). Una expresión lógica que devuelve que falta tiene el mismo efecto que una que es falsa, es decir, se omite la estructura. - En un mandato
END LOOP IF
, una expresión lógica que es falsa devuelve el control al mandatoLOOP
para esa estructura y el bucle continúa. Si es true, el bucle se detiene y la estructura termina. Una expresión lógica que devuelve un valor perdido tiene el mismo efecto que uno que es verdadero, es decir, la estructura termina.
Ejemplo
DATA LIST FREE (",") /a.
BEGIN DATA
1, , 1 , ,
END DATA.
COMPUTE b=a.
* The following does NOT work since the second condition
is never evaluated.
DO IF a=1.
COMPUTE a1=1.
ELSE IF MISSING(a).
COMPUTE a1=2.
END IF.
* On the other hand the following works.
DO IF MISSING(b).
COMPUTE b1=2.
ELSE IF b=1.
COMPUTE b1=1.
END IF.
- El primer
DO IF
nunca producirá un valor de 2 para a1 porque si falta a ,DO IF a=1
se evalúa como perdido y el control pasa inmediatamente aEND IF
. Por lo tanto, a1 será 1 o perdido. - En el segundo
DO IF
, sin embargo, nos ocupamos primero de la condición que falta; por lo tanto, si falta el valor de b ,DO IF MISSING(b)
se evalúa como true y b1 se establece en 2; de lo contrario, b1 se establece en 1.