2

我有一个长 ID 号(例如,12184447992012111111)。通过从 csv 文件中使用 proc 导入,该数字通过在数字之间添加“E”来缩短自身(1.2184448E19,格式为 best12。和信息格式 best32。)。在这里浏览我知道 csv 格式本身会缩短它,所以它与 SAS 无关。所以我试着复制说大约 5 个数字并使用 datalines 语句然后结果也是一样的......如果有人能建议我需要使用哪种格式,那将会很有帮助。使用best32。格式我没有得到原始数字,因为它很可能会修改更改后的数字,这实际上给了我 12184447992012111872 这不是我想要的数字。

4

3 回答 3

2

因为您的 ID 变量实际上是一个标识符而不是一个“真实”数字,所以您需要将其作为字符串读入。您作为示例显示的值太大而无法表示为整数,因此由于 SAS 将所有数字存储为浮点数,因此您正在失去“精度”。

由于您提到使用 PROC IMPORT,请复制它生成的 SAS 程序并从“21”更改 FORMAT 和 INFORMAT 规范。和“best32”。到“32 美元”。(或任何与您的数据匹配的值。

当然,如果您有 SAS Access to PC File 格式,最好的办法是在这种情况下,您可以在 Excel 中将该列格式化为“文本”,然后让 SAS 直接读取它。

于 2012-06-07T22:33:45.460 回答
0

我不确定 csv 是否会更改值(它们只是纯文本文件) - 除非您将 excel 电子表格保存为 csv 文件。如果您使用的是 excel,只需将列设置为数字格式,没有小数位。

将列导入 SAS 时将其视为文本可能更容易 - 除非您需要对其执行数学运算!如果您确实需要将其保留为数字,则格式 32. 应将其强制为 32 位数字 - 最好是相当明智地将其更改为科学记数法(尽管我怀疑数据在后台并且只是无益地显示)。

于 2012-06-07T14:31:08.737 回答
0

有一个用于读取指数符号的 SAS 信息 - Ew.d 其中 w 是宽度,d 是小数位数。在您的情况下,它可能无济于事,因为您将“丢失”完整的数字 - 并且在您使用此信息读取的情况下存储的值将是 1.2184448 * (10^19)。在您的情况下,唯一的方法是确保生成 CSV 文件的程序以正确的方式输出它。如果您是从 Excel 工作表创建数据,则在 Excel 工作表中格式化数字以正确显示所有数字。

于 2012-06-07T15:46:11.680 回答