Kay
Kay

Reputation: 365

Length of numeric values in SAS

I tried with different length for numeric variables. I referred below link

http://support.sas.com/documentation/cdl/en/hostwin/63285/HTML/default/viewer.htm#numvar.htm

where it is given that largest integer that can be represented with length 3 is 8192.

I tried the sample program below. I have declared a variable num with length 3. And tried storing different values which exceeds 8192.

data numeric_values;
    input num;
    length num 3;
    datalines;
    8194
    8192
    8193
    9000
    10000
    10008
    ;
run;

I am not getting any error after executing this program.

Dataset numeric_values got created with all the values 8194 8192 8192 9000 10000 10008

Can someone please explain me the concept of length in numeric data type. Please correct me if my understanding is wrong

Upvotes: 2

Views: 1808

Answers (1)

Jeff
Jeff

Reputation: 1807

SAS stores numbers as floating points. The largest integer that can safely be held in length 3 may be 8192, but larger values can also be stored, with a loss of precision. In your example, you can see that 8193 is actually be corrupted to 8192. Your other example numbers are even, which happen to be safe up to a higher threshold, but if you picked 10009 as an example, you'd see it gets corrupted too, into 10008.

It is interesting that SAS doesn't offer any warnings or notes when this happens. I guess they've decided the burden is on the programmer to be aware of tricks of floating point notation.

[Edited answer to refer specifically to integers, in light of DWal's important comment.]

Upvotes: 3

Related Questions