2017-01-05 2 views
0

Ich habe eine unordentliche Datenmenge, die Nachnamen, Vornamen, Adressen (in dieser Reihenfolge) in einer Variablen enthält, während ich 2 verschiedene (Namen und Adresse) benötigen würde. Ich versuchteSAS split lange Zeichenvariable in 2 Variablen

data commainvest (keep=appln_id person_id person_name lastname firstnames newname address); 
set commainvest; 
lastname=scan(person_name,1,',') ; 
firstnames=scan(person_name,2,',') ; 
newname=catx(', ',lastname,firstnames) ; 
address=substr(person_name,1,length(person_name)-length(newname)) ; 
run; 

und andere wie

address= substr(person_name,-1,length(person_name)-length(newname)) ; 

oder

address= scan(person_name,3,length(person_name)) ; 

aber es macht immer die Adresse Teil falsch oder lässt alle Informationen in der letzten Spalte. Es ist auch nicht nötig, den Vor- und Nachnamen zu trennen, aber ich könnte einen Weg finden, sie von Anfang an zusammen zu lassen. Meine Daten sind durch Kommata getrennt. Ich schätze Ihre Hilfe Dank Anna

+1

können Sie ein Beispiel Ihrer Daten zeigen? –

+0

Es wäre viel einfacher zu sehen, was passiert, wenn ich eine Zeile der Daten sehen könnte –

Antwort

0

Ich glaube, Sie aufgrund der Standardlänge der neuen address Variable abgeschnittener Daten bekommen.

data commainvest (keep=appln_id person_id person_name lastname firstnames newname address); 
    set commainvest; 
    lastname=scan(person_name,1,',') ; 
    firstnames=scan(person_name,2,',') ; 
    newname=catx(', ',lastname,firstnames) ; 
    length address $1000; 
    address=substr(person_name,length(newname),length(person_name)-length(newname)) ; 
run; 

Versuchen Sie das oben (mit Längenangabe). Ihr Code sieht ansonsten gut aus!

+0

nein, das ist es nicht (zum Beispiel wenn ich als Länge "length (person_name)" verlasse, dann ist es die ganze Zeile inkl. Der Namen). Ich kann es nicht verstehen, dass nur das, was nicht in last/firstname ist, in der Adresse sein sollte. Wenn ich "length (person_name) -length (newname)" einfüge, schneidet es es vom Ende und nicht vom Anfang ab. – Annina

+0

Entschuldigung ja, der 'substr' sollte nicht von der ersten Position aus starten, Antwort aktualisiert! –

+0

Das ist es !!!! Ich danke dir sehr :) – Annina

Verwandte Themen