MailLib Konzept - Übung n°6

mit Lösung

Thema

Eine alphanumerische Variable aus einer anderen alphanumerischen Variable mithilfe der Funktion put erstellen: Vermeidung einer Kürzung aufgrund von nicht im Format vorhandenen Werten

Schlüsselwörter

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

Daten

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

Programm

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; 

Die Variable lbtestcd wird mit Hilfe der Variable lbtest und dem Format $lbtest. erstellt. Ziel ist es, aus dem langen Namen des Labortests dessen Kurzbezeichnung zu ermitteln.

a) Aufgabe

Anzeige der Länge und der Standardlänge der Formatbeschriftung ($lbtest.)

Possible Solution 1

proc format fmtlib;
    select $lbtest;
run; 

Possible Solution 2

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

Die Breite des Formatlabels ist die maximale Anzahl von Zeichen in der Variable LABEL.

Die Default-Breite des Formatlabels entspricht der Länge der Formatlabelen, sofern bei der Erstellung des Formats kein anderer Wert angegeben wurde. In diesem Beispiel ist die Default-Breite des Formatlabels 3.

b) Frage

Warum wird "HDL Cholesterol/Total Cholesterol" zu "HDL"?

Possible Solution

Die Default-Breite des Formatlabels, 3, wird in der Funktion put verwendet, da keine andere Breite eingestellt ist, um den Default-Wert zu überschreiben.

Da kein Code im Format mit dem Wert "HDL Cholesterol/Total Cholesterol" übereinstimmt, wird der gesamte Text kopiert, aber aufgrund der Breite des Formatlabels werden nur die ersten drei Zeichen übernommen.

Die Variablenlänge von 40 löst das Problem nicht. Sie könnte die Zeichenfolge nur weiter verkürzen, wenn ihr Wert kleiner ist als die verwendete Breite des Formatlabels.

c) Aufgabe

Aktualisieren Sie das Programm, um den vollständigen Testnamen in der Variablen lbtestcd anzuzeigen, wenn keine Übereinstimmung im Format vorhanden ist.

Vorher Nachher

Possible Solution 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; 

Possible Solution 2

Die Default-Breite des Formatlabels kann überschrieben werden, wenn das Format in der Funktion put verwendet wird.

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

d) Task

Aktualisieren Sie das Programm, um den Text "To Check" anzuzeigen, wenn keine Übereinstimmung im Format vorhanden ist.

Vorher Nachher

Possible Solution

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 Data Handling 2
Module 4, Chapter 4 Discovering Common Functions, Series 2
Module 4, Chapter 4.4 Managing the Format Label Width
Module 4, Chapter 4.4.1 Truncating Unintentionally
Module 4, Chapter 4.4.2 Modifying the Width when Using a Format
Module 4, Chapter 4.4.3 Specifying the Default Width when Creating a Format
Module 4, Chapter 4.4.4 Dealing with Unplanned Change in Meaning
Module 4, Chapter 4.4.5 Avoiding a Change in Meaning using other

Copyright © 2024 xxformat GmbH, Alle Rechte vorbehalten

xxformat GmbH

c/o STARTPLATZ, Im Mediapark 5
50670 Köln
Deutschland

Amtsgericht Köln HRB 90276

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