SAS 中的大数异常

Roi*_*kuu 4 format numbers sas

有人知道为什么“numero”中储存的数字与我放在 let 中的数字不同吗?

我使用 SAS Enterprise Guide 7.1。

这是我的程序:

%let ident = 4644968792486317489 ;

data _null_ ;
    numero= put(&ident.,z19.);
    call symputx('numero',numero);
run;

%put &numero. ;
Run Code Online (Sandbox Code Playgroud)

和日志:

30         %let ident = 4644968792486317489 ;
31         
32         data _null_ ;
33          numero= put(&ident.,z19.);
34          call symputx('numero',numero);
35         run;

NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds
      

36         
37         %put &numero. ;
4644968792486317056
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Tom*_*Tom 5

SAS 将数字存储为 8 字节浮点值。因此,可以精确存储的最大整数(或实际上完全没有间隙)是有限制的。他们甚至发布了一个具有最大值

在此处输入图片说明

以及可用于确定最大值的函数。

3    %put %sysfunc(constant(exactint),comma23.);
9,007,199,254,740,992
Run Code Online (Sandbox Code Playgroud)

看起来您的“号码”实际上是一个标识符。因此,将其存储为字符开始,您将不会遇到这些问题。

data want;
  length numero $19;
  numero = "&ident";
  numero = translate(right(numero),'0',' ');
run;
Run Code Online (Sandbox Code Playgroud)