我正在处理一个数据集,它有一个非常糟糕的ID号,它是一个整数,后面是13位小数。然而,小数点前6-7位是零.例如:
10.0000000960554这让我的生活变得很艰难。所以我想把小数点处的ID解析成两个整数,删除前导零,然后把它们放在一起作为一个巨大的整数。但是,我在Excel中找到的关于如何做到这一点的一切都是在十进制之后的数字。对于Stata,我尝试将数字转换为字符串,这样我就可以解析它,但是Stata不允许我这样做,因为它是十进制的:
encode ScrambledID, generate StringID以下是错误:
not possible with numeric variable
r(107);另一个问题是,我不能只在Excel中拆分十进制,然后用1e+12进行乘法,因为它会扰乱值(很长的故事是如何派生的)。
就像我说的,我不介意在Stata或Excel中这样做。不管怎样,这都快把我逼疯了。
发布于 2016-02-01 20:06:44
在Excel中:
在一栏中插入:
=int(A1)在下一句中:
=--MID(A1,FIND(".",A1)+1,999)正如“年级”培根所说,我在上面的公式中使用了一些捷径。开头的--将数字的文本更改为数字。它取代了VALUE()函数。
999是一个多余的数字,因为它假定被拆分的字符串的长度不超过999个字符。它可以替换为LEN()函数,它将返回字符串的实际长度。
所以把两者结合起来:
=VALUE(MID(A1,FIND(".",A1)+1,LEN(A1)) 其中A1是数字的位置

发布于 2016-02-01 21:05:15
你的故事真令人震惊。
我建议任何软件都要非常小心。首先,带小数部分的数字将以4字节或8字节的形式以floats或double的形式导入不同的数字。根本的问题是,许多十进制数字没有精确的二进制表示。
用Stata术语来说,对于一个数值变量来说,encode是不可能的(您的例子也会因为其他原因而失败)。但理想情况下,首先您应该将标识符作为字符串导入。否则,您应该尝试转换,如generate stringID = string(numid, "%16.13f")。
. di %21s string(10.0000000960554, "%16.13f")
10.0000000960554
. di %21s string(10.00000009605539, "%16.13f")
10.0000000960554
. di %21s string(10.00000009605544, "%16.13f")
10.0000000960554
. di %21s string(10.00000009605535, "%16.13f")
10.0000000960554https://stackoverflow.com/questions/35139242
复制相似问题