在Stata或Excel中将小数分解成两个整数

时间:2016-02-01 20:00:31

标签: excel stata

我正在使用一个数据集,该数据集的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中这样做。无论哪种方式,这都让我疯狂。

2 个答案:

答案 0 :(得分:1)

在Excel中:

在一栏中写道:

=int(A1)

在下一个投注中:

=--MID(A1,FIND(".",A1)+1,999)

作为@ Grade' Eh'培根说,我在上面的公式中使用了一些快捷方式。开头的--会将数字更改为数字。它取代了VALUE()函数。

999是一个多余的数字,因为假设被分割的字符串的长度不超过999个字符。它可以用LEN()函数替换,该函数将返回字符串的实际长度。

所以把两者放在一起:

=VALUE(MID(A1,FIND(".",A1)+1,LEN(A1)) 

其中A1是数字的位置

enter image description here

答案 1 :(得分:0)

你的故事真的令人震惊。

我建议在任何软件中都要格外谨慎。首先,具有小数部分的数字将以不同的方式呈现,具体取决于它们是以4字节还是8字节实数导入,在Stata术语中为float s或double s。根本问题是许多十进制数字没有精确的二进制表示。

在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.0000000960554