首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Stata或Excel中将小数分解为两个整数

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

Stack Overflow用户
提问于 2016-02-01 20:00:30
回答 2查看 490关注 0票数 0

我正在处理一个数据集,它有一个非常糟糕的ID号,它是一个整数,后面是13位小数。然而,小数点前6-7位是零.例如:

代码语言:javascript
复制
10.0000000960554

这让我的生活变得很艰难。所以我想把小数点处的ID解析成两个整数,删除前导零,然后把它们放在一起作为一个巨大的整数。但是,我在Excel中找到的关于如何做到这一点的一切都是在十进制之后的数字。对于Stata,我尝试将数字转换为字符串,这样我就可以解析它,但是Stata不允许我这样做,因为它是十进制的:

代码语言:javascript
复制
encode  ScrambledID, generate StringID

以下是错误:

代码语言:javascript
复制
not possible with numeric variable
r(107);

另一个问题是,我不能只在Excel中拆分十进制,然后用1e+12进行乘法,因为它会扰乱值(很长的故事是如何派生的)。

就像我说的,我不介意在Stata或Excel中这样做。不管怎样,这都快把我逼疯了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-01 20:06:44

在Excel中:

在一栏中插入:

代码语言:javascript
复制
=int(A1)

在下一句中:

代码语言:javascript
复制
=--MID(A1,FIND(".",A1)+1,999)

正如“年级”培根所说,我在上面的公式中使用了一些捷径。开头的--将数字的文本更改为数字。它取代了VALUE()函数。

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

所以把两者结合起来:

代码语言:javascript
复制
=VALUE(MID(A1,FIND(".",A1)+1,LEN(A1)) 

其中A1是数字的位置

票数 1
EN

Stack Overflow用户

发布于 2016-02-01 21:05:15

你的故事真令人震惊。

我建议任何软件都要非常小心。首先,带小数部分的数字将以4字节或8字节的形式以floats或double的形式导入不同的数字。根本的问题是,许多十进制数字没有精确的二进制表示。

用Stata术语来说,对于一个数值变量来说,encode是不可能的(您的例子也会因为其他原因而失败)。但理想情况下,首先您应该将标识符作为字符串导入。否则,您应该尝试转换,如generate stringID = string(numid, "%16.13f")

代码语言:javascript
复制
. 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35139242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档