将长字符字段转换为数字,而非科学记数法(SAS)

时间:2016-02-10 13:23:56

标签: format sas

我需要连接两个表 - 一个表有familyid,它是CHAR30,它看起来有中心对齐而另一个来自homeid为数字20.我需要转换为数字20但是当我这样做时它似乎被截断了,也许因为奇怪的对齐(实际上不需要所有30个位置)。

当我尝试将完整的30个位置保留为数字时,我转而使用科学记数法,因此当然这不会作为以后操作的关键ID。

4 个答案:

答案 0 :(得分:1)

只要数字转换正确,它的格式就不重要了。格式只是告诉SAS如何显示数字。在幕后,它只是一个双重。

1.0 = 1 = 1e0

现在,如果您已转换为某个号码但无法获得加入,请查看您之前阅读的informat

尝试

num_id = input(strip(char_id),best32.);

Strip删除前导和尾随空白。 BEST32. INFORMAT尝试其最好的"读取最多32个字符的数字。

答案 1 :(得分:1)

您无法在SAS中将20位数字存储为数字。 SAS将所有数字存储为8字节浮点,因此没有足够的位来唯一地表示这么多位数。您可以使用CONSTANT()函数向SAS询问它可以准确表示的最大整数。

1    data _null_;
2      x=constant('EXACTINT',8);
3      put x = comma32. ;
4    run;

x=9,007,199,254,740,992

读取并存储20和30位数字符串作为字符变量。

答案 2 :(得分:0)

使用bestd32.格式。倾向于很好地解决长关键变量。根据变量的长度,您可以将32更改为您需要的长度。

答案 3 :(得分:0)

根据原始问题下的评论,您唯一能做的就是将所有ID字段转换为字符串,并使用字符串进行连接。 @Reeza在其中一条评论中提出了这一点,但应该将其作为答案发布。

我假设您将此信息从另一个数据库/系统中提取出来,这样可以提供比SAS更高的数值精度。如果您在读取SAS 时将值转换为字符串,则可能会失去精度。

如果精度损失,SAS中的ID可能与原始系统中的ID略有不同,这可能会在原始系统中搜索从SAS获取的ID时出现问题。

请确保您没有将数字作为数字读入SAS,然后转换为字符串。如果你这样做,一旦数字作为数字变量存储在SAS中,你仍然会失去精度。