Отображение больших чисел их внешних Баз Данных в SAS.

Всем привет.














Сколько бы вы не работали с SAS, все равно постоянно приходиться сталкиваться с чем-то новым.

Недавно столкнулся со следующим глюком - SAS некорректно отображает большие числа из внешних баз данных, а именно округляет их.

Давайте проведем эксперимент и посмотрим как SAS будет отображать следующие числа:


Каждый раз убираем один 0 из числа. Последнее число на 2 больше первого. 


Итак добавляем эти все числа в таблицу в Oracle. 

Посмотрим как она будет выглядеть:



Теперь давай посмотрим как эта таблица будет выглядеть если открыть ее в SAS:



И что мы видим -  то что у нас получилась полная фигня. Все числа (за исключением пятого) исказились. Более того первое и последнее стали одинаковыми, хотя в действительности они разные. Так что будьте внимательны, работая с большими числами.

Оказывается SAS начинает их округлять и искажать если число превышает Number(14).

Будьте внимательны! Так как этот косяк может всплыть уже очень поздно. Например, все числа станут одинаковыми (как в случае с первым и последним нашим числом). А вы даже не будите подозревать в чем дело. 

Теперь напрашивается вопрос, что же с этим делать?

И ответ здесь следующий - переводить число в текст в БД и лишь после с ним работать в SAS. Если потребуется то в SAS можно конвертнуть его обратно в число. 

В нашем случае выход будет следующим: создать view в Oracle, в котором наше поле будет текстовым:



В Oracle данные будут выглядеть следующим образом. 



Тогда мы будем в SAS передавать текстовое значение. 

Откроем созданную View в SAS и увидим:


Все числа отображаются корректно. 


С уважением, 
Николай.