我有一个很长的身份证号码(比如12184447992012111111)。通过使用来自csv文件的proc导入,该数字缩短了自身,并在数字之间添加了“E”(1.2184448E19,格式为best12。和informat best32。)。浏览这里我知道csv格式本身缩短了它以前它与SAS无关。所以我试着复制说5个数字然后使用datalines语句,然后结果也一样....如果有人可以建议我需要使用哪种格式,那将会有所帮助。使用best32。格式我没有得到原始数字,因为很可能它修改了改变的数字,这实际上给了我12184447992012111872这不是我想要的数字。
答案 0 :(得分:2)
因为您的ID变量实际上是标识符而不是“真实”数字,所以您需要将其作为字符串读取。您作为示例显示的值太大而无法表示为整数,因此,由于SAS将所有数字存储为浮点数,因此您将失去“精度”。
由于您提到使用PROC IMPORT,请复制它生成的SAS程序并更改“21.”中的FORMAT和INFORMAT规范。和“best32。”到“32美元”。 (或与您的数据匹配的任何值。
当然,如果您使用SAS文件格式的SAS访问权限,那么您最好将该列格式化为Excel中的“文本”,并让SAS直接读取它。
答案 1 :(得分:0)
我不确定csv是否更改了值(它们只是纯文本文件) - 除非您将Excel电子表格另存为csv文件。如果您使用excel,只需将列设置为数字格式,不要小数位。
将列导入SAS时,将列视为文本可能更容易 - 除非您需要对其执行数学运算!如果你真的需要将它保持为数字格式32.应该强制它是一个32位数字 - 最好将其合理地改为科学记数法(尽管我怀疑数据是在后台并且只是显示无益)。
答案 2 :(得分:0)
有一个用于读取指数表示法的SAS信息--Ew.d其中w是宽度,d是小数位数。在您的情况下,它可能无济于事,因为您将“丢失”完整的数字 - 如果您使用此信息读取,则存储的值将为1.2184448 *(10 ^ 19)。在您的情况下,唯一的方法是确保生成CSV文件的程序以正确的方式输出它。如果要从Excel工作表创建数据,请在Excel工作表中格式化数字以正确显示所有数字。