Community deutschsprachiger SAS-Anwender und -Programmierer

Antworten
Dies ist eine offene Gruppe. Melden Sie sich an und klicken Sie auf die Schaltfläche „Gruppe beitreten“, um Mitglied zu werden und damit zu beginnen, Beiträge in dieser Gruppe zu veröffentlichen.
Highlighted
Occasional Contributor
Beiträge: 12
Strasse und Hausnummer trennen (split string in two variables)

Hallo zusammen,

ich habe eine Variable in der Strasse und Hausnummer zusammen drin stehen. Ich würde diese gern in zwei Variablen trennen

data example;

input street_number $30.;

datalines;

Limburger Str. 15a

Genter Str. 1

Schanzenstrasse 12 b

Hollunder Weg 92

;

run;

Ich suche quasi nach einer Funktion der ich sagen kann: sobald die erste Stelle eine Zahl ist - trenne diese in neue Variable.

Street                      Number

Limburger Str.           15a

Genter Str.               1

Schanzenstrasse      12 b

Hollunder Weg          92

Ich habe an substr() und scan() gedacht, aber meine Internetsuche war leider bisher sehr erfolglos... Ich freue mich über Denkanstöße und eure Unterstützung!

Viele Grüße

Silke

Occasional Contributor
Beiträge: 10
Re: Strasse und Hausnummer trennen (split string in two variables)

Hallo Silke,

ich würde vorschlagen, dass mal mit den Perl Regular Expression (RegEx) zu versuchen.
Die Problemstellung gibt ja keinen festen Trennpunkt her, also muss man sich diesen ermitteln.

Der reguläre Ausdruck (\d) sucht nach einem numerischen Wert, die Funktion PRXMATCH gibt die erste Position zurück.

data example;

    input street_number $30.;

datalines;

Limburger Str. 15a

Genter Str. 1

Schanzenstrasse 12 b

Hollunder Weg 92

;

run;

data _text(Drop=_sta _len);

    set example;

    _sta = prxmatch("/\d/",street_number);

    _len = length(street_number) - _sta;

    street = substr(street_number, 1, _sta - 1);

    street_no = substr(street_number, _sta, _len+1 );

run;

Ergebnis:

2015-04-15 12_43_39-Screenshot.jpg

Viele Grüße

Andreas

P.S. Informationen findet man auch in dem Perl Regular Expressions Tip Sheet

N/A
Beiträge: 0
Re: Strasse und Hausnummer trennen (split string in two variables)

In dem Falle sollte es auch mit SAS gehen.

Ich finde RegEx nicht gerade eingängig ;-)

_sta = indexc(street_number,'0123456789');

Ich habe gerade kein SAS hier, evtl. muss man noch etwas probieren wenn es keine Ziffer gibt.

Eckhard

Occasional Contributor
Beiträge: 5
Re: Strasse und Hausnummer trennen (split string in two variables)

eine 100%-Lösung gibt's leider nicht (immer). Gutes Beispiel zum testen "Straße des 8. März 99b" Smiley (zwinkernd)

Esteemed Advisor
Beiträge: 6.685
Re: Strasse und Hausnummer trennen (split string in two variables)

Noch besser: "5. Haidequerstrasse". Und wer sich wundert, obs sowas gibt: Wien - Simmering.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
Esteemed Advisor
Beiträge: 6.685
Re: Strasse und Hausnummer trennen (split string in two variables)

Das Ganze schlägt dann fehl bei "Strasse des 1. Mai"

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
Occasional Contributor
Beiträge: 5
Re: Strasse und Hausnummer trennen (split string in two variables)

Falls irgendwann mal meine Antwort vom Moderator freigegeben wurde: Doppelposting da es hier wohl eine ganze weile dauert, bis alle Posts zu lesen sind...

Valued Guide
Beiträge: 3.206
Re: Strasse und Hausnummer trennen (split string in two variables)

Denn nicht from links nach rechts arbeiten aber vom rechts nach links.  Dass macht ein mensch auch.    

---->-- ja karman --<-----
Esteemed Advisor
Beiträge: 6.685
Re: Strasse und Hausnummer trennen (split string in two variables)

Man kann nicht nur nach numerisch/alphanumerisch trennen. Es gibt auch Hausnummern wie 14a, oder Stiege III. Das torpediert dann auch die Vorgangsweise von rechts.

Ich glaube nicht, dass man das maschinell mit 100% Zuverlässigkeit machen kann.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
Occasional Contributor
Beiträge: 12
Re: Strasse und Hausnummer trennen (split string in two variables)

Danke schön! Hat prima geklappt!

Viele Grüße,

Silke

User
Beiträge: 1
Re: Strasse und Hausnummer trennen (split string in two variables)

Hallo Silke,

also ich habe in meinen Daten eine Trefferwahrscheinlichkeit von 99,87 %.

Eine Hausnummer beginnt ab der ersten Ziffer im String (1).

Dann prüfe ich die Hausnummer bis zum vorletzten Zeichen (2). Das letzte Zeichen ist mir egal.

Kommt nur noch ein 'und' vor, dann ist es ok (3).

Kommt nur noch ein 'bis' vor, dann ist es auch ok (4).

Sonst gebe ich auf und der ganze Text wird Straße (5).

Als Sonderzeichen habe ich nur den Bindestrich und Leerzeichen, aber die sind natürlich ok.

     length STRASSE MYSTRASSE MYHAUSNR $60 HAUSNR $10 FALL 8;

     /* Wir droeseln Strasse und Hausnummer auf: */
     if anydigit (ADDRESS_LINE_1_TXT) then do;
        MYSTRASSE = substr (ADDRESS_LINE_1_TXT, 1, anydigit (ADDRESS_LINE_1_TXT) - 1);

/* ad (1): */
        MYHAUSNR = substr (ADDRESS_LINE_1_TXT, anydigit (ADDRESS_LINE_1_TXT));

        /* Kommt noch eine Information nach der Hausnummer? */

/* ad (2): */
        if anyalpha (substr (left (reverse (MYHAUSNR)), 2)) then do;
           /* und und bis lassen wir so:*/

/* ad (3): */
           if not anyalpha (tranwrd (lowcase (MYHAUSNR), 'und', ' ')) then FALL = 1;

/* ad (4): */
           else if not anyalpha (tranwrd (lowcase (MYHAUSNR), 'bis', ' ')) then FALL = 1;
           /* sonst geben wir auf: */
           else FALL = 2;
        end;
        else do;
           FALL = 1;
        end;
     end;
     else FALL = 2;

/* ad (5): */

     if FALL = 2 then STRASSE = ADDRESS_LINE_1_TXT;
     else do; /* Fall = 1 */
        HAUSNR = MYHAUSNR;
        STRASSE = MYSTRASSE;
     end;

Gruß

Benno