Десятичная точность в символьном поле потеряна при вводе
Я пытаюсь преобразовать символьную переменную, содержащую число, в числовую переменную без потери десятичной точности. Вот пример вывода:
data _null_;
format res 20.17;
res = input("54.78566360473633",20.17);
put res;
run;
и результат:
54.78566360473630000
Вы можете видеть, что количество цифр в результате правильное, но последняя ненулевая цифра не соответствует последней цифре символьной переменной. Я пробовал использовать форматы с большим и меньшим количеством цифр (например, 18,15 или 15,13), и я пробовал "принудительно" использовать количество десятичных разрядов с форматом вроде f20.17, но, похоже, ничего из этого не работает..
Я пробовал просмотреть некоторые страницы документации, но ничего не кажется подходящим. Я уверен, что это действительно базовые вещи, которые мне здесь не хватает, но как мне заставить sas точно читать все цифры?
1 ответ
SAS имеет два типа данных. Числа с плавающей запятой и символьные строки фиксированной длины. Форматы - это просто инструкции по отображению значения. Информация - это инструкция по преобразованию текста в значения. Ни ФОРМАТ, прикрепленный к переменной, ни ИНФОРМАТ, используемый для создания значений в переменной, не влияют на способ хранения числа.
Если вы хотите использовать десятичную арифметику, сохраните свои значения как целые числа и следите за показателем в отдельной переменной. Но даже в этом случае точность, которую можно сохранить, будет ограничена размером мантиссы, используемой в представлении с плавающей запятой, используемом вашей версией SAS. Вы можете увидеть наибольшее непрерывное целое число, которое SAS может точно сохранить, используя параметр EXACTINT функции CONSTANT().