SAS - 从带有科学计数法数字的csv文件导入时如何保留实际数字
Posted
技术标签:
【中文标题】SAS - 从带有科学计数法数字的csv文件导入时如何保留实际数字【英文标题】:SAS - how to preserve actual numbers when importing from a csv file with numbers in scientific notation 【发布时间】:2012-04-06 21:53:53 【问题描述】:当我将具有长数字 ID 的文件从 csv 文件导入 SAS 时,我想将数字转换为文本。但是这些数字是以科学记数法存储的,所以当它们转换时,最后的数字都变成了零。
例如,7.3139908E14 变成了 731399080000000,而应该是 731399076376199。
有没有办法解决这个问题?最终我需要做一些重复数据删除,然后将此文件导出为文本文件。
谢谢!
【问题讨论】:
这看起来不像是 SAS 问题,而是您的 csv 文件有问题。如果查看 csv 文件,您看到的是 7.3139908E14 还是 731399076376199?如果它是第一种类型,那么 SAS 无法知道最后一位数字是什么。您是否在 Excel 中创建了 CSV 文件?如果是这样,您需要对其进行不同的格式化,这样它就不会截断变量。 感谢您的回答!问题是我正在从数据库中导出 150 万行数据,并且我尝试将其保存为文本文件和 csv 文件。使用文本文件,我可以打开它,但我无法更改格式。使用csv文件,从技术上讲,我可以更改格式,但它太大了,我无法完全打开它。 你能从 .txt 文件中发布几行,从 .csv 文件中发布几行吗? 在将列保存到 CSV 之前将其转换为文本字段。例如,在 mysql 或 SQL 服务器数据库中,您可以使用类似cast(myvariable as char(30)) as my_text_var
的内容来执行此操作。
【参考方案1】:
假设您的数据看起来像(即第二个 CSV 位置的数字 ID):
blah;7313990763761997;blah
您可以逐行简单地读取文件并直接访问输入缓冲区(_INFILE_ 变量):
filename mycsv "\path\to\mycsv.csv";
data mydata;
infile mycsv;
input;
length idvar $16;
idvar=scan(_infile_,2,";");
run;
这将保留文本格式的数字,如果您只想这样做的话。
【讨论】:
以上是关于SAS - 从带有科学计数法数字的csv文件导入时如何保留实际数字的主要内容,如果未能解决你的问题,请参考以下文章
Java导出csv数字如何不以科学计数显示,不能改变原来的值