十进制到十六进制到十进制

时间:2015-10-21 07:30:18

标签: sas

我正在阅读一些数据,其中最初为十六进制的数字已被读入十进制数。

由于这些十六进制示例都是有效的十进制数,当我从文本文件中读取它们时,SAS已读取为十进制数。

例子是53和68,它们分别是83和104小数的十六进制数。

使用hex2。格式将53和68转换为十六进制数(例如68变为44),这不是我想要的。

有没有让SAS将53和68识别为十六进制而不尝试将它们转换为十六进制?

1 个答案:

答案 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