我在读一些数据,在这些数据中,原本是十六进制的数字被读成十进制。
由于这些十六进制示例也都是有效的十进制数字,当我从文本文件中读取它们时,SAS已经读取,然后作为十进制。
例子是53和68,它们分别是83小数和104小数的十六进制数。
使用hex2。格式将53和68转换为十六进制数(例如,68变为44 ),这不是我想要的。
有没有办法让SAS识别53和68为妖术,而不试图将它们转化为妖术?
发布于 2015-10-21 14:08:45
使用informat hexw.。回想一下,信息和格式是不同的。
信息格式
informat是SAS语言元素的一种类型,它将模式应用于或执行数据值作为输入读取的指令。
格式
格式是SAS语言元素的一种类型,它将模式应用于或执行数据值显示或写入为输出的指令。
一种很好的记忆方式:
格式的是您如何看待它的。
informat是中的SAS 如何看待它的。
解释
在格式中用于将中的值转换为SAS可以适当地执行数学操作的内容。例如,
01JAN2015
就其本身而言,它只是一个字符串。SAS不知道如何在01JAN2015上执行数学运算,它将自动以字符串的形式读取值。但是,SAS确实知道如何解释该字符串所代表的内容。你只需要告诉SAS以某种方式来解释它。
对于SAS在日期上做数学计算,它使用1/1/1960的引用日期。通过应用informat date9.,SAS能够理解字符串表示自1960年1月1日以来的第20,089天。然后,输出看起来是这样的:
20089
这对人们来说很难读。您可以将mmddyy10.格式应用于此,以便您可以读取它,但SAS也可以理解它。格式不会改变SAS看到的内容。该值仍然以十进制形式存储,但它向您显示的方式更易读。
**To SAS** **To you**
date date
20089 01/01/2015在您的示例中,SAS知道您正在读取的值是数字。它会自动地假设它是十进制,但我们知道事实是它不是。
按照上述逻辑,我们希望对数值应用informat,这样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 68https://stackoverflow.com/questions/33253412
复制相似问题