Découvrez le cours de novembre 2022 : Les fonctions put et input – un sujet épineux
Passer d’une variable numérique à une variable caractère ou inversement est fréquent en langage de programmation SAS. Les fonctions INPUT et PUT permettent de changer ainsi le type de la variable. Dans un premier temps, je vous propose deux exemples pour illustrer les deux situations. Dans un second temps, on verra deux emplois supplémentaires de la fonction PUT : ajouter des zéros avant et après le nombre, et passer d’une valeur caractère à une autre valeur caractère.
Exemples d’application : dans la vie courante, il est fréquent de créer une variable texte à partir de plusieurs autres. Dans le lot, il y a souvent une variable numérique. Celle-ci doit être convertie en texte avant la concaténation. A l’inverse, on peut vouloir extraire le chiffre d’une chaîne de caractère et le sauvegarder dans une variable numérique.
Note : Dans un data step, on est obligé de créer de donner un nom différent à la variable d’origine et à la nouvelle variable. Il est alors courant de renommer au préalable la variable d’origine pour pouvoir utiliser son nom pour la nouvelle variable. Ensuite, la variable d’origine est supprimée. Dans une procédure SQL, le même nom peut être utilisé.
1. Du caractère au numérique et inversement
La fonction INPUT est composée de deux paramètres : la variable texte ou directement la chaîne de caractère d’un côté, l’informat de l’autre.
Du caractère au numérique : ici, on indique à la machine qu’il faut lire la variable d’origine comme une variable texte pouvant atteindre une longueur de 16 caractères. Pour cela on utilise l’informat $16. On peut aussi choisir un informat $CHAR. : ici $CHAR16. (SAS Online Doc. : INPUT Function, Informats by Category)
data char_to_num;
x_char = ‘123456789.123456’;
x_num = input(x_char,$16.);
*x_num = 123456789.123456;
run;
Note : Pensez à ajouter un format sur la variable numérique si vous ne la lisez pas intégralement dans votre output.
Du numérique au caractère : dans l’exemple ci-dessous, on indique que la valeur caractère à créer aura jusqu’à 16 chiffres/point dont 6 après la virgule. C’est l’information donnée par le format numérique 16.6. Bien sûr, on peut avoir la longueur nombre à convertir peut-être plus petit sans risquer d’affecter la valeur. Une autre possibilité est d’utiliser le format BEST16. Si aucun nombre n’est précisé (BEST.) cela revient à BEST8. SAS cherche alors la meilleure réponse possible permettant d’entrer 8 chiffres/point. Les décimales pourront être tronquées s’il n’y a pas assez de place, voir les entiers.
data num_to_char;
y_num = 123456789.123456;
y_char = put(y_num,16.6);
*y_char = ‘123456789.123456’;
run;
2. Les plus de la fonction PUT
Ajouter des zéros aux extrémités du nouveau texte : le format z. permet de remplacer les espaces vides par des zéros. Dans l’exemple ci-dessous, la nouvelle variable aura une longueur de 8 caractères. Les deux derniers seront les chiffres après la virgule. Comme il n’y en a qu’un seul dans la variable d’origine, un zéro sera ajouté à la fin. Il reste deux espaces en début à remplir avec des zéros.
data num_char_zero;
z_num = 123.1;
z_char = put(z_num,z8.2);
*z_char = ‘00123.10’;
run;
Passer d’une valeur caractère à une autre : la valeur caractère d’origine peut aussi être du texte et non des chiffres. Dans cette situation, la nouvelle variable prend la valeur d’un format caractère souvent défini par le programmeur.
proc format;
value $cntry
FR = ‘France’
LU = ‘Luxembourg’
CH = ‘Suisse’;
run;
data char_to_char;
a1_char=’LU’;
a2_char=put(a1_char,$cntry.);
*a2_char=’Luxembourg’;
run;
Aller plus loin :
Découvrez le cours de novembre 2022 : Les fonctions put et input – un sujet épineux