2017-01-05 146 views
0

我有一个凌乱的数据集,其中包含姓氏,名字,地址(按此顺序)在一个变量中,而我需要这是2个不同的名称和地址。 我试图SAS将长整型字符变量分成两个变量

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= substr(person_name,-1,length(person_name)-length(newname)) ; 

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

但它总是错误地削减地址部分或离开最后一列的所有信息。 实际上也没有必要削减最后名字和姓氏,但我可以找到一种方法将它们从一开始就放在一起。我的数据之间用逗号分隔。 我感谢你的帮助 感谢 安娜

+1

你能展示一个你的数据的例子吗? –

+0

如果我能看到一行数据 –

回答

0

我相信你正在因新address变量的默认长度截断数据。

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

道歉是的,'substr'不应该从第一个位置开始,答案已更新! –

+0

就是这样!非常感谢 :) – Annina