¿Cómo evitar la división por cero en SAS?

La división por cero no tiene ningún significado y, por lo tanto, no está definida. Sin embargo, si se trabaja con datos, la división por cero puede ocurrir. En este artículo, discutimos cómo evitar la división por cero en SAS.

Aunque la división por cero no tiene sentido en el mundo real, SAS no se queja de ello. SAS simplemente ejecuta el código y, si se detecta una división por 0, devuelve un registro vacío. Sin embargo, SAS también escribe una “NOTA: División por cero detectada en la línea XX columna XX” en el registro.

data division_por_cero;
	a = 0;
	b = 4;
	c = b / a;
run;
Nota en Log con división por cero en SAS

Mientras que muchos usuarios de SAS sólo comprueban que el log de SAS no generé ERROR, los buenos programadores de SAS también se ocupan de las ADVERTENCIAS y, por lo tanto, tratan de evitar la división por cero.

¿Cómo evitar la división por cero en SAS? Puedes evitar la división por cero de dos maneras. Primero, usar una sentencia IF-ELSE. Segundo, usar la función DIVIDE. En este artículo, discutimos ambas maneras de hacer esto.

Consideremos el siguiente conjunto de datos:

XY
53
0-4
14
-40
4-3
4-2
4-5
-10
10
-5-1
data datos;
	input x y;
	datalines;
5 3
0 -4
1 4
-4 0
4 -3
4 -2
4 -5
-1 0
1 0
-5 -1
;
run;

Evitar la división por cero con la sentencia IF-ELSE THEN

La primera opción para evitar una división por 0 es hacer uso de una sentencia IF-ELSE THEN. En primer lugar, comprobamos si el denominador es cero y, si es así, devolvemos vacío. En caso contrario, devolvemos el resultado de la división.

data evitar_division_por_cero;
set datos;
	if y = 0 then con_restriccion = . ;
	else con_restriccion = x/y;
run;

Evitar la división por cero con la función DIVIDE

La segunda opción para evitar la división por 0 es haciendo uso de la función DIVIDE. Esta función tiene dos argumentos: numerador y denominador, devuelve el resultado de la división entre ambos. Si denominador es cero, la función DIVIDE no escribe NOTA en Log. En su lugar, devuelve I (más infinito) o M (menos infinito), dependiendo de la operación.

data evitar_division_por_cero_funcion;
	set datos;
	division = divide(x,y);
run;
Resultado división por cero  usando la función divide de SAS

Aunque I y M suenan como “números”, en realidad son valores nulos. El código siguiente lo demuestra con la función MISSING (donde 1 es Verdadero y 0 es Falso).

data validacion_vacios;
	set evitar_division_por_cero_funcion;
	validacion = missing(division);
run;