Publié le :
Macro CREATION_INTERNE

Utilisation des fonctions %EVAL et %SYSEVALF

Ce code est également disponible en : Deutsch English Español
En attente de validation
Ce script SAS© illustre comment utiliser les fonctions macro %EVAL et %SYSEVALF pour réaliser des opérations arithmétiques sur des variables macro. Il commence par un calcul simple de différence de salaires avec %EVAL, soulignant son aptitude aux nombres entiers. Ensuite, il met en évidence la limitation de %EVAL avec les nombres décimaux en introduisant une valeur flottante qui provoque une erreur. Enfin, il présente %SYSEVALF comme la solution robuste pour gérer les calculs avec des nombres à virgule flottante, garantissant la précision et évitant les erreurs.
Analyse des données

Type : CREATION_INTERNE


Les données sont des variables macro numériques (%salary1, %salary2) définies directement dans le script, sans aucune source de données externe ni données SASHELP.

1 Bloc de code
MACRO Data
Explication :
Ce bloc initialise deux variables macro, `salary1` et `salary2`, avec des valeurs entières. Il utilise ensuite la fonction macro `%EVAL` pour calculer la différence entre ces deux salaires et stocke le résultat dans une nouvelle variable macro `salary_diff`. La valeur de `salary_diff` est affichée dans le journal SAS à l'aide de `%PUT`. Ce cas fonctionne car `%EVAL` est adapté aux opérations sur les entiers.
Copié !
1%let salary1=25000;
2%let salary2=27000;
3%let salary_diff = %eval(&salary2 - &salary1);
4%put The salary difference is &salary_diff;
2 Bloc de code
MACRO
Explication :
Dans ce bloc, `salary2` est modifié pour inclure une valeur décimale. Le calcul de la différence est à nouveau tenté avec `%EVAL`. Cependant, `%EVAL` est conçu pour les opérations sur les entiers et ne peut pas traiter correctement les nombres à virgule flottante. Cela entraînerait une erreur ou un avertissement dans le journal SAS, car `%EVAL` tente de convertir la valeur décimale en entier, ce qui est une limitation de cette fonction.
Copié !
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 Bloc de code
MACRO
Explication :
Ce bloc corrige le problème précédent en utilisant la fonction macro `%SYSEVALF`. `%SYSEVALF` est spécifiquement conçue pour évaluer des expressions arithmétiques qui peuvent inclure des nombres à virgule flottante. Elle permet un calcul précis de la différence de salaire, même lorsque les opérandes sont des décimales, sans générer d'erreurs ou d'avertissements liés au type de données dans le journal SAS.
Copié !
1%let salary1=25000;
2%let salary2=27050.45;
3%let salary_diff = %sysevalf(&salary2 - &salary1);
4%put The salary difference is &salary_diff;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Practice 3: Use the %EVAL and %SYSEVALF Functions Lesson 2 - Using Macro Functions SAS Macro Language 1: Essentials