在Stata或Excel中将小数parsing为两个整数
我正在处理一个数据集,这个数据集的ID号非常可怕,是一个整数,后面跟着十三位数字。 但是,前6-7小数位是零。 例如:
10.0000000960554
这使我的生活困难。 所以我想把小数部分的ID分解成两个整数,放下前导零,并把它们作为一个巨大的整数放在一起。 但是,我发现如何在Excel中执行此操作的所有内容都会保留小数点后的数字。 对于Stata,我试图将数字转换为一个string,所以我可以parsing它,但Stata不会让我,因为它是一个小数:
encode ScrambledID, generate StringID
这是错误:
not possible with numeric variable r(107);
另外一个问题,我不能把Excel中的小数部分分开,然后乘以1e + 12,因为它会混淆值(长篇小说以及它们是如何派生的)。
就像我所说的,我在Stata或Excel中都可以做到这一点。 无论哪种方式,这是让我疯狂。
在Excel中:
在一栏中写道:
=int(A1)
在接下来的提示中:
=--MID(A1,FIND(".",A1)+1,999)
正如@ Grade'Eh'Bacon所说,我在上面的公式中使用了几个捷径。 在开始时,将数字转换为数字。 它取代了VALUE()
函数。
999
是一个多余的数字,因为假定被分割的string的长度不超过999个字符。 它可以用LEN()
函数replace,它将返回string的实际长度。
所以把它们放在一起:
=VALUE(MID(A1,FIND(".",A1)+1,LEN(A1))
A1是数字的位置
你的故事确实令人震惊。
我会build议在任何软件非常小心。 首先,具有小数部分的数字将根据是以4字节还是8字节的实数导入,以Stata的forms以float
或double
float
。 根本问题是许多十进制数字没有确切的二进制表示。
用Stata术语来说, encode
确实不存在数字variables的问题(并且您的示例也会由于其他原因而失败)。 但理想情况下,您应该首先将标识符作为string导入。 否则,你应该尝试一个转换,如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.0000000960554