我需要连接两个表 - 一个表有familyid,它是CHAR30,它看起来有中心对齐而另一个来自homeid为数字20.我需要转换为数字20但是当我这样做时它似乎被截断了,也许因为奇怪的对齐(实际上不需要所有30个位置)。
当我尝试将完整的30个位置保留为数字时,我转而使用科学记数法,因此当然这不会作为以后操作的关键ID。
答案 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中,你仍然会失去精度。