Stata 取消对18位数字的排序返回舍入错误

Stata 取消对18位数字的排序返回舍入错误,stata,Stata,我有长度为18的ID作为字符串,我想把它们转换成一个数值变量。 我尝试了以下代码: destring var, replace 以数字格式返回变量的。但是,ID的最后一位包含舍入错误。例如:12345678123456000-->12345678123456001 我怎样才能在ID没有任何变化的情况下销毁我的值呢?我无法重现,如下所示: . clear . set obs 1 number of observations (_N) was 0, now 1 . gen test = &qu

我有长度为18的ID作为字符串,我想把它们转换成一个数值变量。 我尝试了以下代码:

destring var, replace
以数字格式返回变量的。但是,ID的最后一位包含舍入错误。例如:12345678123456000-->12345678123456001


我怎样才能在ID没有任何变化的情况下销毁我的值呢?

我无法重现,如下所示:

. 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。本质上,您遇到的是可以精确保存在每个数字有8个字节的
double
中的内容。

为什么要对标识符进行算术运算?应该有直接的方法使用字符串函数操作标识符。