Всем привет.
Сколько бы вы не работали с SAS, все равно постоянно приходиться сталкиваться с чем-то новым.
Недавно столкнулся со следующим глюком — SAS некорректно отображает большие числа из внешних баз данных, а именно округляет их.
Давайте проведем эксперимент и посмотрим как SAS будет отображать следующие числа:
- 1000000000123456789
- 200000000123456789
- 30000000123456789
- 4000000123456789
- 500000123456789
- 1000000000123456791
Каждый раз убираем один 0 из числа. Последнее число на 2 больше первого.
Итак добавляем эти все числа в таблицу в Oracle.
Посмотрим как она будет выглядеть:
Теперь давай посмотрим как эта таблица будет выглядеть если открыть ее в SAS:
И что мы видим — то что у нас получилась полная фигня. Все числа (за исключением пятого) исказились. Более того первое и последнее стали одинаковыми, хотя в действительности они разные. Так что будьте внимательны, работая с большими числами.
Оказывается SAS начинает их округлять и искажать если число превышает Number(14).
Будьте внимательны! Так как этот косяк может всплыть уже очень поздно. Например, все числа станут одинаковыми (как в случае с первым и последним нашим числом). А вы даже не будите подозревать в чем дело.
Теперь напрашивается вопрос, что же с этим делать?
И ответ здесь следующий — переводить число в текст в БД и лишь после с ним работать в SAS. Если потребуется то в SAS можно конвертнуть его обратно в число.
В нашем случае выход будет следующим: создать view в Oracle, в котором наше поле будет текстовым:
В Oracle данные будут выглядеть следующим образом.
Тогда мы будем в SAS передавать текстовое значение.
Откроем созданную View в SAS и увидим:
Все числа отображаются корректно.
С уважением,
Николай.