SAS infile用E截断长数

时间:2014-07-28 14:30:40

标签: sas

我搜索了一下,发现有些人问了一个类似的问题,但我找不到可以开展工作的答案。

我有制表符分隔的.txt文件,我需要读入SAS数据库。这些文件包含一个长度为18的序列号,因此SAS将其导入为“5.2231309E17”。

理想情况下,SAS会将​​所有字段导入为文本,而不是数字。

要为此添加复杂性,导入文件有两种不同的格式,这些格式只有在文件打开时才可见,我无法从名称中分辨出文件的格式。此外,文件中没有列名。所以在我读完文件之前,我不知道哪一列是什么。

目前我的出发点是:

data Readin;
infile foo dsd dlm='09'x truncover; 
input item1-item25;
run;

foo就像'c:\ myfile.txt'

这样的文件

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

这里有两个不同的问题。一个是“9.234E17”以科学记数法显示,两个是你正在阅读的数字,无论如何都不能完全以数字形式存储。

首先,这就是BEST12。 format works,这是这样的事情的默认数字格式。它并没有以有意义的方式截断它;如果您只是将格式更改为BEST32。例如,它将在精度限制范围内显示整个数字,并且它将始终表现为全数,同样在精度限度内;如果我使用12345678,格式化BEST6。,它将显示为1.23e7,但如果我说if x=12345678 then do; put x; end;,它将放x,因为它将完全等于该值。

但是,最后一部分很重要,而问题的第二部分也是如此。您不能精确存储18位数字; 15位数是您在Windows和类似英特尔类型环境中可以精确存储的最大数字,在大型机上的结果略有不同。所以你肯定需要将它们存储为角色,除非你不关心最后几位数(听起来像你)。

如果您有(任何)分隔文件,最好的办法是简单地写一个数据步骤来读取它们,此时您可以自己将它们指定为角色。不要将proc import用于大多数文本文件,除非它们真的很容易搞砸了。您可以做的是在PROC IMPORT运行后查看您的日志,并将该日志复制到程序中;然后进行调整以将序列号转换为字符字段(以及您想要修复的任何其他内容)。

答案 1 :(得分:-1)

我有一个类似的问题,我试图导入一个有20位长字段的文件,我找到一个解决方法,在Excel中打开文件并将列的属性从一般更改为数字,然后当我导入文件时,它被导入为数字而不是科学记谱法