Concept MailLib - Exercice n°6

avec solution

Thématique

Créer une variable caractère à partir d'une autre variable caractère à l'aide de la fonction put : éviter une troncature due à des valeurs non disponibles dans le format

Mots-clés

*function #put *format #proc format #(default=) #other

Données

data lb;
    length lbtest $40;
    lbtest='Hematocrit';                        output;
    lbtest='Leukocytes';                        output;
    lbtest='HDL Cholesterol/Total Cholesterol'output;
run; 

Programme

proc format;
    value $lbtest   'Hematocrit'     ='HCT'
                    'Leukocytes'     ='WBC'
                    'HDL Cholesterol'='HDL';
    value $lbtestcd 'HCT'='Hematocrit'
                    'WBC'='Leukocytes'
                    'HDL'='HDL Cholesterol';
run;
 
data lb_new;
    set lb;
    length lbtestcd $40;
    lbtestcd=put(lbtest,$lbtest.);
run; 

La variable lbtestcd est créée à partir de la variable lbtest et du format $lbtest. L'objectif est d'obtenir le nom court du test de laboratoire à partir du nom long.

a) Tâche

Afficher la longueur et la longueur par défaut du libellé du format $lbtest..

Solution Possible 1

proc format fmtlib;
    select $lbtest;
run; 

Solution Possible 2

proc format cntlout=lbtest;
    select $lbtest;
run;
 
proc print data=lbtest noobs;
    var fmtname start label min max length default;
run; 

La largeur du libellé du format est le nombre maximum de caractères observés dans la variable LABEL.

La largeur par défaut du libellé du format est égale à la largeur du libellé du format, à moins qu'une autre valeur ne soit spécifiée lors de la création du format. Dans cet exemple, la largeur par défaut du libellé du format est de 3.

b) Question

Pourquoi "HDL Cholesterol/Total Cholesterol" devient-il "HDL"?

Solution Possible

La largeur par défaut du libellé du format, 3, est utilisée dans la fonction put parce qu'aucune autre largeur n'est définie pour remplacer la valeur par défaut.

Étant donné qu'aucun code du format ne correspond à la valeur "HDL Cholesterol/Total Cholesterol", l'ensemble du texte est copié, mais seuls les trois premiers caractères sont conservés en raison de la largeur pour le libellé du format.

La longueur de la variable, 40, ne résout pas le problème. Elle ne peut que raccourcir davantage la chaîne lorsque sa valeur est inférieure à la largeur du libellé de format utilisé.

c) Tâche

Mettre à jour le programme afin d'afficher le nom complet du test dans la variable lbtestcd lorsqu'aucune correspondance n'est disponible dans le format.

Avant Après

Solution Possible 1

proc format;
    value $lbtest (default=40) 'Hematocrit'     ='HCT'
                               'Leukocytes'     ='WBC'
                               'HDL Cholesterol'='HDL';
run;
 
data lb_new;
    set lb;
   *length lbtestcd $40;
    lbtestcd=put(lbtest,$lbtest.);
run; 

Solution Possible 2

La largeur par défaut du libellé du format peut être remplacée lors de l'utilisation du format dans la fonction put.

data lb_new;
    set lb;
   *length lbtestcd $40;
    lbtestcd=put(lbtest,$lbtest40.);
run; 

d) Task

Mettre à jour le programme afin d'afficher le texte "To Check" lorsqu'aucune correspondance n'est disponible dans le format.

Avant Après

Solution Possible

proc format;
    value $lbtest   'Hematocrit'     ='HCT'
                    'Leukocytes'     ='WBC'
                    'HDL Cholesterol'='HDL'
                    other            ='To Check';
run;
 
data lb_new;
    set lb;
    length lbtestcd $40;
    lbtestcd=put(lbtest,$lbtest.);
run; 

Resource Hub

Module 4 Traitement de données 2
Module 4, Chapitre 4 Découvrir des fonctions courantes, série 2
Module 4, Chapitre 4.4 Gérer la largeur des libellés de format
Module 4, Chapitre 4.4.1 Tronquer involontairement
Module 4, Chapitre 4.4.2 Modifier la largeur lors de l'utilisation du format
Module 4, Chapitre 4.4.3 Préciser la largeur par défaut lors de la création du format
Module 4, Chapitre 4.4.4 Changer involontairement de sens
Module 4, Chapitre 4.4.5 Éviter un changement de sens avec other

Copyright © 2024 xxformat GmbH, Tous droits réservés

xxformat GmbH

c/o STARTPLATZ, Im Mediapark 5
50670 Cologne
Allemagne

Amtsgericht Köln HRB 90276

Geschäftsführer: Véronique Bourcier
veronique.bourcier@xxformat.com
+49 1577 288 6066