Как использовать PUT и INPUT в SAS - PullRequest
1 голос
/ 06 марта 2019

У меня проблема с приведением типов с использованием PUT и INPUT для некоторых столбцов в таблице SAS.

Я пытаюсь отформатировать:

               ###I need:          Using: 
tipdoc='01' -> tipdoc=1            input(tipdoc, 1.)
coddoc=1234 -> coddoc=00001234     put(coddoc, z8.) 

но у меня есть такой результат:

tipdoc=0
coddoc=       .

Не могли бы вы предложить какие-нибудь идеи? Спасибо.

Ответы [ 2 ]

3 голосов
/ 06 марта 2019

Информат сообщает INPUT, как интерпретировать поступающее значение.1. выбирает только цифру 0, и вы получаете 0 цифр.coddoc - это уже число, и ему нужен только формат для отображения начальных нулей, или, возможно, вам нужна символьная переменная с начальными нулями.

data want;

tipdoc='01';
coddoc=1234;

tipdoc_num = input(tipdoc,best12.);
format coddoc z8.;

coddoc_char = put (coddoc,z8.);

run;

ods listing;
proc print data=want;
run;

--------

                             tipdoc_    coddoc_
Obs    tipdoc      coddoc      num        char

 1       01      00001234       1       00001234
1 голос
/ 06 марта 2019

Вы используете FORMAT для преобразования значений в текст. Вы используете INFORMAT для преобразования текста в значения. Используйте FORMAT с операторами FORMAT и PUT и с функциями PUT () (и PUTN () и PUTC ()). Используйте INFORMATS с операторами INFORMAT и INPUT, а также с функциями INPUT () (и INPUTC () и INPUTN ()).

Если TIPDOC является символьной строкой, используйте ИНФОРМАТ, по крайней мере, такой же ширины, как самое длинное значение, которое имеет переменная. Или, чтобы быть в безопасности, вы можете просто использовать максимальную ширину, разрешенную используемым информатом.

numberic_tipdoc = input(tipdoc,32.);

Если CODDOC - это число, то вы можете использовать формат для отображения значения с начальными нулями. Или используйте функцию PUT() для создания символьной переменной с форматированным значением.

format coddoc z8. ;
character_coddoc = put(coddoc, z8.);

Если преобразованное значение CODDOC отображается в виде периода, то оно имеет пропущенное значение. Именно так SAS отображает пропущенные числовые значения. Вы можете использовать опцию MISSING, чтобы SAS отображал пропущенные значения, используя другой символ. Например, чтобы он отображался как пробел, используйте команду

options missing=' ';

перед использованием функции PUT () или распечатыванием значения другими методами.

Или вы можете просто выполнить тест программы, если отсутствует CODDOC, а затем использовать другое значение для новой переменной.

character_coddoc = put(coddoc, z8.);
if missing(coddoc) then character_coddoc='missing';
...