在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以floatdouble 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