我有一个包含不同地址的专栏,如下所示:
Mathilde 45 rue du Chemin neuf 35950 Chichigneux
我需要创建新列,一列用于名称(此处为 Mathilde),一列用于数字 (45),一列用于街道 (rue du Chemin neuf),一列用于邮政编码 (35950),一列用于城市 (Chichigneux) 。 我已经成功地使用此代码完成了除街道名称之外的所有操作:
DATA DmExo3.Test;
SET DmExo3.Adresses;
/* Extraction du nom */
Nom = scan(Contact, 1, ' ');
/* Extraction du numéro de rue */
Numero = scan(Contact, 2, ' ');
/* Extraction du nom de la rue */
/* Extraction du code postal */
CodePostal = input(scan(Contact, -2, ' '), 5.);
/* Extraction de la ville */
Ville = scan(Contact, -1, ' ');
RUN;
我在初级班,所以答案应该不会太复杂,但我被困住了,因为扫描不允许你选择几个单词。我尝试过使用 substr,但是街道名称开始和结束的位置随每个地址而变化。
街道位于 numero 和 postal 之间。
您可以使用
findw()
函数来定位您根据之前的假设找到的字符串的位置:(第2个单词是numero,-2nd单词是postal),并提取其中。
邮政编码被保留为数字变量有什么原因吗?
data have;
contact = 'Mathilde 45 rue du Chemin neuf 35950 Chichigneux';
run;
data want;
set have;
Nom = scan(Contact, 1, ' ');
Numero = scan(Contact, 2, ' ');
Postal = scan(Contact, -2, ' ');
Ville = scan(Contact, -1, ' ');
p1 = findw(contact, trim(numero), ' ');
p2 = findw(contact, trim(postal), ' ', 'b');
if 0 < p1 < p2 then
street = substr(contact,p1,p2-p1);
drop p1 p2;
run;