前段时间清理过一个数据集,发现其中城市名称的字符型变量里面包含一些“肉眼不可见”的乱码,表现为虽然字符两边有一些“空格”,但是用trim() 命令却无法删除,具体情况可以参见statalist上面的一个邮件。根据邮件上的信息,我试图采用下面的方法识别和清楚字符中的乱码
. charlist city
&'().01?ABCDEGHIJKLMNPQSTUWXYZabcdeghijklnopqrstuwxyz?
. ret li
macros:
r(chars) : "
&'().01?ABCDEGHIJKLMNPQSTUWXYZabcdeghijklnopqrs.."
r(sepchars) : "
&' ( ) . 0 1 ? A B C D E G H I J K L M N P .."
r(ascii) : "10 13 32 38 3940 41 46 48 49 63 65 66 67 68 69 71.."
and
replace city = subinstr(city, "`=char(10)'", "",.)
replace city = subinstr(city, "`=char(32)'", "",.)
replace city = subinstr(city, "`=char(161)'`=char(161)'","",.)
但是,最近我需要讲这个stata13格式的数据转换成stata14格式的,采用的是unicode translate命令,但是转换后发现城市名字符变成了一个个小方块,如下图。
诡异的是,即使我没有采用上面的方式清除那些 不可见的乱码,转换后仍然是同样的方块乱码,所以我不能100%确定这个问题的来源。数据样本见附件。望各位老师帮我看一下,问题出在哪里,多谢