Publicado el :
Général CREATION_INTERNE

Sans titre

Este código también está disponible en: Deutsch English Français
En espera de validación
Análisis de datos

Type : CREATION_INTERNE


Los datos son variables macro numéricas (%salary1, %salary2) definidas directamente en el script, sin ninguna fuente de datos externa ni datos SASHELP.

1 Bloque de código
MACRO Data
Explicación :
Este bloque inicializa dos variables macro, `salary1` y `salary2`, con valores enteros. Luego, utiliza la función macro `%EVAL` para calcular la diferencia entre estos dos salarios y almacena el resultado en una nueva variable macro `salary_diff`. El valor de `salary_diff` se muestra en el registro SAS usando `%PUT`. Este caso funciona porque `%EVAL` es adecuado para operaciones con enteros.
¡Copiado!
1%let salary1=25000;
2%let salary2=27000;
3%let salary_diff = %eval(&salary2 - &salary1);
4%put The salary difference is &salary_diff;
2 Bloque de código
MACRO
Explicación :
En este bloque, `salary2` se modifica para incluir un valor decimal. Se intenta nuevamente el cálculo de la diferencia con `%EVAL`. Sin embargo, `%EVAL` está diseñado para operaciones con enteros y no puede procesar correctamente los números de coma flotante. Esto provocaría un error o una advertencia en el registro SAS, ya que `%EVAL` intenta convertir el valor decimal a entero, lo cual es una limitación de esta función.
¡Copiado!
1%let salary1=25000;
2%let salary2=27050.45;
3%let salary_diff = %eval(&salary2 - &salary1);
4%put The salary difference is &salary_diff;
3 Bloque de código
MACRO
Explicación :
Este bloque corrige el problema anterior utilizando la función macro `%SYSEVALF`. `%SYSEVALF` está específicamente diseñada para evaluar expresiones aritméticas que pueden incluir números de coma flotante. Permite un cálculo preciso de la diferencia salarial, incluso cuando los operandos son decimales, sin generar errores o advertencias relacionadas con el tipo de datos en el registro SAS.
¡Copiado!
1%let salary1=25000;
2%let salary2=27050.45;
3%let salary_diff = %sysevalf(&salary2 - &salary1);
4%put The salary difference is &salary_diff;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Practice 3: Use the %EVAL and %SYSEVALF Functions Lesson 2 - Using Macro Functions SAS Macro Language 1: Essentials