我有长度为18的ID作为字符串,我想将它们转换为数字变量。我尝试了以下代码:
destring var, replace
返回具有数字格式的变量。但是,ID的最后一位包含舍入误差。例如:123456789123456000-->123456789123456001
如何在ID没有任何更改的情况下destring
我的值?
我无法重现如下所示:
. clear
. set obs 1
number of observations (_N) was 0, now 1
. gen test = "123456789123456000"
. destring, gen(check)
test: all characters numeric; check generated as double
. l
+--------------------------------+
| test check |
|--------------------------------|
1. | 123456789123456000 1.235e+17 |
+--------------------------------+
. format check %23.0f
. l
+-----------------------------------------+
| test check |
|-----------------------------------------|
1. | 123456789123456000 123456789123456000 |
+-----------------------------------------+
另一种循环方式确实会产生错误;123456789123456001";映射到123456789123456000。本质上,您遇到的是double
中可以精确保存的内容,每个数字有8个字节。