Преобразование чисел с помощью COMMAw, d - PullRequest
0 голосов
/ 25 января 2019

Я следую за страницей справки SAS и пытался добиться тех же результатов, что и в примерах внизу страницы. Мой код:

data _null_;
    test=23451.23;
    result=input(test,comma10.2);
    put 'this should be:' result;
run; 

с выводом в лог

this should be:23451

, а должно быть 23 451,23. Там нет ни ошибок, ни полезных заметок, ни предупреждений.

Когда я не использую функцию ввода, она дает правильный результат

data _null_;
        test=23451.23;
        format test comma10.2;
        put 'this should be:' test;
run;

Что здесь происходит? Разве нельзя объединить вход и COMMAw, d ?

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Форматы используются для преобразования значений в строки.Информаторы используются для преобразования строк в значения.Вы используете форматы с операторами PUT и FORMAT или функцией PUT ().Вы используете информацию с инструкциями INPUT и INFORMAT или функцией INPUT ().

Так что функции INPUT() требуется символьная строка в качестве первого аргумента, но вы дали ей номер. Обратите внимание, что SAS поместит в журнал ЗАМЕЧАНИЕ о том, что ему нужно преобразовать числа в символы. SAS будет использовать формат BEST12. для преобразования, поэтому ваше число 23451.23 станет строкой из 12 символов ' 23451.23'.Затем, когда функция INPUT() использует информацию COMMA10.2, она читает только первые 10 символов, и вы пропускаете десятичные цифры.Обратите внимание, что ширина должна быть не только больше, но вы НЕ должны включать значение после десятичной точки в информативе.Если бы у вашего информата была еще меньшая ширина, вы бы пропустили десятичную точку, а SAS подразумевал бы ее (разделив целочисленное значение на 100).

Если вы хотите, чтобы ваши числа отображались определенным образом, тогда простоприкрепите желаемый формат к переменной.Вы можете просто добавить спецификацию формата в оператор PUT.

put test= comma10.2 ;

Или присоединить формат к переменной, используя оператор FORMAT.

format test comma10.2;

Если вы хотитепреобразуйте свой номер в строку символов, затем используйте функцию PUT()

char_result = put(test,comma10.2);

или PUTN().

char_result = putn(test,'comma10.2');
0 голосов
/ 25 января 2019

Использование оператора Put:

data _null_;
   test=23451.23;
   result=put(test,comma10.2);
   put 'this should be:' result;
run; 

это должно быть: 23,451.23


Ссылка на объясненные различия между функциями. Таблица со страницы:

+---------------------------+-------------------+------------+---------------------+-----------------+
|       Function Call       |      Raw Type     |  Raw Value |    Returned Type    |  Returned Value |
+---------------------------+-------------------+------------+---------------------+-----------------+
| A  PUT(name, $10.);       | char, char format | ‘Richard’  | char always         | ‘Richard   ’    |
| B  PUT(age, 4.);          | num, num format   | 30         | char always         | ‘  30’          |
| C  PUT(name, $nickname.); | char, char format | ‘Richard’  | char always         | ‘Rick’          |
| D  INPUT(agechar, 4.);    | char always       | ‘30’       | num, num informat   | 30              |
| E  INPUT(agechar, $4.);   | char always       | ‘30’       | char, char informat | ‘  30’          |
| F  INPUT(cost,comma7.);   | char always       | ‘100,541’  | num, num informat   | 100541          |
+---------------------------+-------------------+------------+---------------------+-----------------+
...