LesezeichenAbonnierenRSS-Feed abonnieren
mwuer
Calcite | Level 5

Hallo zusammen,

 

ich bin ein kompletter SAS EG Neuling und stoße gerade an meine Grenzen. Ich habe in meiner Tabelle "Kundendaten" in der Spalte "Kundenname" das Problem, dass ein und derselbe Kunde häufig unterschiedlich geschrieben wird. Ich möchte in dieser Tabelle eine neue Spalte einfügen, in der die Namen richtig geschrieben werden. 

Z.B. in Spalte Kundenname steht "MaxMustermann" oder "Maxx Musterman",... in Spalte Kundenname_angepasst sollen diese als "Max Mustermann" geschrieben werden. 

 

Ich habe bereits etwas mit der Rename Formel experimentiert. Komme aber nicht weiter, da ich die Namen nicht überschreiben möchte, sondern in eine neue Spalte ausgeben. 

 

Kann mir Jemand weiterhelfen?

 

Vielen Dank vorab und viele Grüße

Melli

4 ANTWORTEN 4
jh_ti_bw
Obsidian | Level 7

Hallo Melli,

 

rename benennt eine Spalte um, nicht den Inhalt der Spalte.

 

Namen anzugleichen ist keine dankbare Aufgabe. Eine mögliche Lösung ist, sich ein Informat zu definieren. Dort werden alle vorkommenden Namen, die angeglichen werden sollen eingetragen. Um sich das Leben zu vereinfachen wandelt man alle Schreibkombinationen in Großbuchstaben um und definiert die Option UPCASE im Informat.

Der Code zum Umwandeln ist dann einfach und ändert sich auch nicht mehr, wenn man weitere Schreibweisen angleichen will. Dafür werden einfach neue Muster in das Format eingetragen.

Data have;
    length name $50;
    infile cards length= laenge;
    input name $varying. Laenge;
    cards;
MaxMustermann
Max Mustermann
max mustermann
Maxx Mustermann
Erika Mustermann
run;
Proc format;
    invalue $namen_angleichen (upcase default=50)
        "MAXMUSTERMANN", "MAXX MUSTERMANN", "MAX MUSTERMANN" = "Max Mustermann"
        other = _same_
    ;
run;
Data want;
    set have;
    length neuer_name $50;
    neuer_name = input(name, $namen_angleichen.);
run;

Eine Liste aller Schreibweisen bekommst Du z. B. so;

Proc SQL;
    Create table UniqueName as
    select count(*) as N, name, Name_Gross from(
        select distinct name ,   Upcase(Name) as Name_Gross from have
    )
    group by Name_Gross
    ;
quit;

Wenn in N eine Zahl > 1 steht, dann gibt es verschieden Groß- und Kleinschreibung in dem Namen.

 

Viele Grüße

 

Jan

mwuer
Calcite | Level 5

Hi Jan,

 

Danke für deine Antwort. Habe es gleich eingesetzt aber irgendwo ist noch ein Fehler, denn die Namen werden nicht angepasst. Je nachdem ob Kunde eine Firma oder eine Privatperson ist, ist im Name ein Komma hinterlegt. Könnte es daran liegen?

 

Data have;
length name $50;
infile cards length= laenge;
input name $varying. Laenge;
cards;
PaulBecker GmbH

Paul Becker, GmbH
Bert Bauer, P
Max Deutschland, GmbH
run;
Proc format;
invalue $namen_angleichen (upcase default=50)
"PaulBecker GmbH" , "Paul Becker, GmbH" = "Becker GmbH"
"Bert Bauer, P" = "Bert Bauer"
"Max Deutschland, GmbH" = "Deutschland GmbH"
other = _same_
;
run;
Data want;
set have;
length neuer_name $50;
neuer_name = input(name, $namen_angleichen.);
run;

jh_ti_bw
Obsidian | Level 7

Hallo Melli,

 

ne, das Komma ist es nicht. Du musst die Muster zum Vergleichen alle in Großbuchstaben umwandeln.

Proc format;
    invalue $namen_angleichen (upcase default=50)
    "PAULBECKER GMBH" , "PAUL BECKER, GMBH" = "Becker GmbH"
    "BERT BAUER, P" = "Bert Bauer"
    "MAX DEUTSCHLAND, GMBH" = "Deutschland GmbH"
    other = _same_
    ;
run;

 Die Option Upcase weist SAS an, vor dem Vergleich den Text in Großbuchstaben umzuwandeln. Demnach muss der Vergleichswert auch in Großbuchstaben umgewandelt werden. Markieren und CTRL+SHIFT+U wandelt Text in Großbuchstaben, oder den SQL-code nehmen, dann hast den Text gleich in Großbuchstaben.

 

Viele Grüße

Jan

mwuer
Calcite | Level 5
Super, es hat funktioniert. Vielen Dank für die Hilfe. (Auch für den Tipp mit CTRL+SHIFT+U!

sas-innovate-2024.png

Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.

 

Register now!

Diskussionsstatistiken
  • 4 Antworten
  • 1650 Aufrufe
  • 0 Kudos
  • 2 in Unterhaltung