2017-01-05 10 views
0

私は2つの異なるもの(名前とアドレス)である必要がありますが、1つの変数でlastnames、firstnames、addresses(その順番)を含む乱雑なデータセットを持っています。 私は、このようなSASは長い変数を2つの変数に分割します

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

または

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

として

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; 

などを試してみましたが、それは常に間違ったアドレスの一部をカットするか、最後の列のすべての情報を残します。 実際に最後と最初の名前を削除する必要はありませんが、最初から一緒に残す方法があります。私のデータは、それらの間のカンマで区切られています。 は、私はあなたが新しいaddress変数のデフォルトの長さのために切り捨てられたデータを取得していると考えているあなたの助けのおかげ アンナ

+1

データの例を表示できますか? –

+0

データの行を見ることができれば、何が起こっているのかがはるかに分かりやすくなります。 –

答えて

0

を感謝しています。

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; 

上記(長さ説明付き)をお試しください。そうでなければあなたのコードは上手く見える!

+0

いいえ、それはそうではありません(たとえば、長さ「length(person_name)」のままにしておけば、名前)。私はlast/firstnameにないものだけがアドレスにあるべきであることを理解させることはできません。 「length(person_name)-length(newname)」を置くと、最初からではなく最後から切り取られます。 – Annina

+0

apologはい、 'substr'は最初の位置から開始すべきではありません。 –

+0

それはそれです!!!!どうもありがとうございます :) – Annina

関連する問題