Prüfen, ob ein String eine Zahl sein könnte
Verfasst von marcosch am 21 September, 2009 - 17:56
Hallo,
ich möchte innerhalb eines Datasteps einen Variableninhalt dahingehen überprüfen, ob man den Inhalt (Text) in eine Zahl umwandeln könnte... In Excel wäre das soetwas wie =ISTZAHL(), =ISNUMBER().
Hintergrund:
1. Wenn Text eine Zahl sein könnte, dann auf neun Stellen vornullen.
-> '12345' wird zu '000012345' per put(input(Text, 9.), Z9.)
2. Text kann nicht ohne Fehler in eine Zahl umgewandelt werden
-> '111ABC777' bleibt unverändert
Hier im Forum hab ich nichts gefunden, wobei mir ein guter Suchbegriff aber auch nicht eingefallen ist... Kann mir jemand helfen?
Gruß,
Marco
»
- Anmelden oder Registrieren um Kommentare zu schreiben

SAS - RegEx
Hallo zusammen,
ich würde hier mit regulären Ausdrücken arbeiten.
Die Notation ist zwar am Anfang vielleicht etwas ungewöhnlich aber dafür die Funktionalität/Flexibiität deutlich höher.
Beispiel von Herrn Kneilmann hier mit RegEx:
data blabla (drop=_:);
/* So wird der RegEx-Ausdruck nur einmal compiliert. */
_patternID = prxparse('/\D\S/');
/* \D alles was keine Zahl ist UND
\S alles was kein Whitespace ist
*/
length Text1 $10;
Text1 ='12345';
_position=prxmatch(_patternID, Text1) ;
if (_position = 0) then zahl1=put(input(Text1, 9.), z9.);
put text1= zahl1= _position=;
length Text2 $10;
Text2 ='12X45';
_position = prxmatch(_patternID, Text2);
if (_position = 0) then zahl2=put(input(Text2, 9.), z9.);
put text2= zahl2= _position=;
run;
Viele Grüße
Tim_Taylor
P.S. ist glaube ich erst seit Version 9 verfügbar....
klappt gut unter SAS 9
Danke! Klappt unter SAS 9, allerdings brauche ich die Funktion unter SAS 8.2. Insofern zieht hier die "Kneilmann-Lösung" :-)
Reguläre Ausdrücke sind aber unterschätzt... ich muss mir die häufiger mal ins Gedächnis rufen :-)
Gruß aus Hamburg,
Marco Schmidt
Reguläre Ausdrücke
Hallo,
dem kann ich mich nur anschlißen: Reguläre Ausdrücke sind super!!
Und unter UNIX-Betriebssystemen (Solaris, AIX, HP-UX, Linux oder wie sie alle heißen) ein alter Hut, der nix-desto-trotz von mir intensiv genutzt wird (im Rahmen von UNIX-Shell-Scripten zur LOG-Analyse, zur Automatisierung von 1001-Sachen und und und).
Gruß
Hans Kneilmann, Schäfer Shop GmbH (SSI)
String gleich Zahl
Hallo Marco,
es geht ganz einfach z.B. so:
length Text $10;
Text ='12345';
if kcompress(ktranslate(Text ,' ','0123456789')) eq '' then do; /* input() nur wenn OK */
Zahl = put(input(Text, 9.), z9.);
end;
put text= zahl=;
Text ='12X45';
if kcompress(ktranslate(Text ,' ','0123456789')) eq '' then do; /* input() nur wenn OK */
Zahl = put(input(Text, 9.), z9.);
end;
put text= zahl=;
run;
Viel Erfolg damit.
Gruß
Hans Kneilmann, Schäfer Shop GmbH (SSI)
Das klappt
Super! Vielen Dank.
Bei mir funktionieren zwar weder kcompress noch ktranslate aber nur mit compress und translate geht das super.
Vielen Dank dafür!
Unter SAS 8.2 sollten eigentlich auch die k-Funktionen klappen, aber tun sie nicht :-(
Gruß
Marco Schmidt
es geht auch einfacher
In SAS gibt es eine passende Funktion NOTDIGIT (http://support.sas.com/onlinedoc/913/getDoc/en/lrdict.hlp/a002194195.htm)
falls in SAS 8.2 NOTDIGIT nicht gibt, kann man auch mit Funktion VERIFY arbeiten:
Viele Grüße
Waldemar