2017-01-11 3 views
1

I wie unten eine Tabelle haben:Substring Funktion Ausgabe

PROC_TP 
112 
5255 
5255 
5255 
112 
5255 
5255 

Die PROC_TP ist numerisch mit Format 6. und ich möchte nur die erste Stelle bekommen, so habe ich es in den Charakter mit der Put-Funktion als:

char_PROC_TP=put(PROC_TP,6.); 
format char_PROC_TP $6.; 

Dann sieht die Tabelle wie folgt aus:

PROC_TP  Char_PROC_TP 
112   112 
5255   5255 
5255   5255 
5255   5255 
112   112 
5255   5255 
5255   5255 

Nun ist die char_PROC_TP ist Charakter mit Format von 6 $. Dann habe ich die Funktion substr als:

first_digit=substr(char_PROC_TP,1,1); 

Dann bekomme ich keinen Wert. Also, kann mir jemand sagen, was das Problem mit ihm und seiner Lösung sein könnte. Jede Hilfe wird geschätzt.

Antwort

1

Dies geschieht, weil Ihre Konvertierung in Zeichen einen rechtsbündig ausgerichteten Wert erstellt. Sie können es mit der Justierungsoption im 6. Format als 6.-L beheben. Auch für das erste Zeichen verwenden Sie die erste Funktion, die standardmäßig die Länge $ 1 hat.

data test; 
    input PROC_TP; 
    char_proc_tp = put(proc_tp,6.-L); 
    first_digit=first(char_PROC_TP); 
    cards; 
112 
5255 
5255 
5255 
112 
5255 
5255 
;;;; 
run; 

enter image description here

4

substrN() wird ein numerisches Argument nehmen und sie automatisch in Zeichen umwandeln und trimmen Zuschnitte Vorder- und Hinter, falls erforderlich.

First = SUBSTRN(num_var, 1, 1); 

Siehe documentation for SUBSTRN.

+1

kühlen. Link scheint die Funktionsseite CATX() anstelle von SUBSTRN() aufzurufen. Hier ist relevanter Text von der Manpage: Wenn string numerisch ist, wird er in einen Zeichenwert konvertiert, der BEST32 verwendet. Format. Führende und nachfolgende Leerzeichen werden entfernt und keine Nachricht an das SAS-Protokoll gesendet. – Tom

+1

Link sollte behoben sein. – Joe

0

Verwenden Sie die STRIP Funktion

char_PROC_TP=strip(put(PROC_TP,6.)); 

data test; 
Length FIRST_DIGIT $1; 
input PROC_TP; 
char_proc_tp = strip(put(proc_tp,6.)); 
first_digit=substr(char_PROC_TP,1,1); 
datalines; 
112 
5255 
5255 
5255 
112 
5255 
5255 
;