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