我正在阅读一些数据,其中最初为十六进制的数字已被读入十进制数。
由于这些十六进制示例都是有效的十进制数,当我从文本文件中读取它们时,SAS已读取为十进制数。
例子是53和68,它们分别是83和104小数的十六进制数。
使用hex2。格式将53和68转换为十六进制数(例如68变为44),这不是我想要的。
有没有让SAS将53和68识别为十六进制而不尝试将它们转换为十六进制?
答案 0 :(得分:3)
使用信息hexw.
。回想一下,信息和格式是不同的。
<强> INFORMAT 强>
信息是一种SAS语言元素,它将模式应用于或执行指令,以便将数据值读取为输入。
<强>格式强>
格式是一种应用模式的SAS语言元素 或执行要显示或写入的数据值的指令 如输出。
记住它的好方法:
格式是你看到
的方式信息是 SAS 在中看到它的方式
<强>解释强>
格式用于将 in put值转换为SAS可以适当执行数学运算的值。例如,
01JAN2015
它本身只是一个字符串。 SAS不知道如何在01JAN2015
上执行数学运算,它会自动将该值作为字符串读取。但是,SAS 确实知道如何解释该字符串代表的内容。你只需告诉SAS以某种方式解释它。
对于SAS在日期上进行数学运算,它使用的参考日期为1/1/1960。通过应用信息date9.
,SAS能够理解该字符串代表自1960年1月1日以来的第20,089天。输出将如此:
20089
人们难以阅读。您可以将mmddyy10.
格式应用于此,以便您可以阅读它,但SAS也可以理解它。格式不会改变SAS看到的内容。该值仍然以十进制形式存储,但它显示给您的方式更具可读性。
**To SAS** **To you**
date date
20089 01/01/2015
在您的情况下,SAS知道您正在阅读的数值是数字。它会自动假设它是小数,但我们知道它不是。
遵循上述逻辑,我们希望将数据应用于数值,以便SAS将值解释为十六进制,而不是小数。
data want;
informat hex_value hex2.;
input hex_value;
datalines;
53
68
;
run;
您的表格如下:
hex_value
83
104
如果应用格式hex2.
,您将再次看到输出表格为十六进制。既然我们已经解释了价值,我们只是改变了它的外观,而不是它对SAS的看法:
**To SAS** **To you**
hex_value hex_value
83 53
104 68