Publié le :
Macro CREATION_INTERNE

Aligner des nombres dans une variable caractère

Cette macro, à utiliser au sein d'une étape DATA, modifie une variable caractère pour y aligner les nombres qu'elle contient. L'alignement se fait en ajoutant des espaces à gauche de la partie entière du nombre. Pour cela, la macro sépare la partie entière de la partie décimale, aligne à droite la partie entière selon une largeur spécifiée, puis la réassemble avec la partie décimale. Elle gère aussi les nombres sans décimales. La macro dépend d'une autre macro, %mf_getuniquename, pour générer un nom de variable temporaire unique afin d'éviter les conflits.
Analyse des données

Type : CREATION_INTERNE


La macro ne lit ni ne crée de jeu de données. Elle est conçue pour opérer sur une variable au sein d'une étape DATA. L'exemple d'utilisation fourni dans la documentation génère des données à la volée pour démontrer son fonctionnement.

1 Bloc de code
MACRO
Explication :
Définition de la macro `%mp_aligndecimal`. Elle prend en paramètre une variable (`var`) et une largeur (`width`). Elle utilise `%mf_getuniquename` pour obtenir un nom de variable temporaire unique. Une instruction `LENGTH` est générée pour définir la largeur de cette variable temporaire. Ensuite, le code vérifie si la variable d'entrée contient un point décimal. Si c'est le cas, il sépare la partie entière (avec `SCAN`), l'aligne à droite (avec `RIGHT`) dans la variable temporaire, puis reconstruit la variable d'origine en concaténant la partie entière alignée, le point décimal, et la partie décimale. Si aucun point n'est trouvé, la variable entière est simplement alignée à droite. Enfin, la variable temporaire est supprimée avec `DROP`.
Copié !
1%macro mp_aligndecimal(var,width=8);
2 
3 %local tmpvar;
4 %let tmpvar=%mf_getuniquename(prefix=aligndp);
5 LENGTH &tmpvar $&width;
6 IF index(&var,'.') THEN DO;
7 &tmpvar=cats(scan(&var,1,'.'));
8 &tmpvar=right(&tmpvar);
9 &var=&tmpvar!!'.'!!cats(scan(&var,2,'.'));
10 END;
11 ELSE DO;
12 &tmpvar=cats(&var);
13 &tmpvar=right(&tmpvar);
14 &var=&tmpvar;
15 END;
16 drop &tmpvar;
17 
18%mend mp_aligndecimal;
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 : Allan Bowe