最近我得到了一些具有英国地址的数据集。地址是
从扫描的PDF
文件中提取文件,并将其中的一些文件作为字符串存储在
不同的变量。
合并并清理后,我得到了一个变量 就像这个例子:
54 Islington Park St, London, N1 1PX
1 00 Upper St, London, N1 0NP
St. Marys Church, Upper St, London, N1 2TX
Camden Passage, 3 3, Islington Green, London, N1 8DU
2 0 7 Upper Street, Islington, LONDON, N1 1RL
问题是某些地址号码和邮政编码中有空格, 不在每个观察中固定。有数千个地址,因此请对其进行修复 不能一一对应。
通常我会按照以下方式做一些事情:
gen fixedaddress=subinstr(address,"3 3","33",1)
但是,这将适用于最后一刻之前的观察,而不适用于其余部分。
任何建议将不胜感激。
答案 0 :(得分:2)
如果您拥有Stata 14和更高版本,则可以使用新的Unicode正则表达式来实现 引擎:
clear
input str60 address
"54 Islington Park St, London, N1 1PX"
"1 00 Upper St, London, N10NP"
"St. Marys Church, Upper St, London, N1 2TX"
"Camden Passage, 3 3, Islington Green, London, N18DU"
"2 0 7 Upper Street, Islington, LONDON, N1 1RL"
end
generate wanted = ustrregexra(address, "(?<=\d)\s+(?=\d)", "")
list wanted
+----------------------------------------------------+
| wanted |
|----------------------------------------------------|
1. | 54 Islington Park St, London, N11PX |
2. | 100 Upper St, London, N10NP |
3. | St. Marys Church, Upper St, London, N12TX |
4. | Camden Passage, 33, Islington Green, London, N18DU |
5. | 207 Upper Street, Islington, LONDON, N11RL |
+----------------------------------------------------+
使用上述正则表达式,函数ustrregexra()
消除仅位之间的所有空格。 Click here详细了解常规
表达。
如果您使用的是较旧版本的Stata,则消除空间更为实用 首先将各个变量放在一起,然后将所有内容放在一起。