Почему я не могу использовать функцию длины внутри функции ввода в SAS?

У меня есть код, который преобразует символ в числовой, используя информацию, и я использую функцию длины в качестве значения информации.

Однако у меня есть ошибка с этим подходом.

Предпосылкой этой проблемы является то, что информация раньше была фиксированным значением. Я хочу улучшить код, чтобы информация была гибкой, и удалила фиксированное значение.

Перед кодом:

data work.test;
emp_input = '168643123'
emp_value = input(emp_input, 6.);
run;

Мой текущий тестовый код:

data work.test;
emp_input = '168643123'
emp_value = input(emp_input, length(emp_input).);
run;

Я ожидаю, что в результате символ «168643123» будет преобразован в число 168643123.

При использовании кода перед выводом для этого будет: числовой 168643.


person Juan Dela Cruz    schedule 17.06.2019    source источник


Ответы (4)


Это неверный синтаксис. Вы должны использовать inputn и затем сгенерировать строку для формата.

data work.test;
  emp_input = '168643123';
  emp_value = inputn(emp_input, cats(put(length(emp_input),3.),'.'));
run;

Но лучше используйте Use BEST32. для всех общих номеров длиной до 32 символов.

data work.test;
  emp_input = '168643123';
  emp_value = input(emp_input, BEST32.);
run;
person Lee    schedule 17.06.2019
comment
На самом деле не существует INFORMAT с именем BEST, если вы его используете, SAS просто преобразует его в обычный числовой формат. Существует имя формата BEST, которое регулирует используемый формат отображения для наилучшего размещения числового значения в ограниченном количестве символов. Но обратная концепция того, в какое число лучше всего переводить конкретную символьную строку, не имеет смысла. Вы просто хотите, чтобы он преобразовал строку символов в число, которое представляет строка. - person Tom; 17.06.2019
comment
Я попробую это, сэр, и вернусь за результатами - person Juan Dela Cruz; 18.06.2019

INPUT требует текстового значения для второго параметра.

INPUTN () или INPUTC () может принимать второй параметр как строку / символ / переменную и использовать это для применения формата. Вам нужно сначала преобразовать его в строку.

person Reeza    schedule 17.06.2019

Почему? Функция INPUT с удовольствием настраивается, когда ширина информации больше, чем длина строки, которую вы читаете. Просто используйте максимальную ширину, которую позволяет информация.

emp_value = input(emp_input,32.);

Если вы действительно хотите ограничить количество считываемых символов (возможно, после цифр стоят буквы?), Вы можете использовать функцию INPUTN () (или функцию INPUTC () для символьных результатов). Давайте проверим, добавив несколько X в конец строки и используя информацию, ширина которой заканчивается перед X.

emp_value = inputn(cats(emp_input,'XXX'),cats(length(emp_input),'.'));
person Tom    schedule 17.06.2019

Этот код работал у меня. Это основано на всех ваших ответах. Большое спасибо!

data work.test;
emp_input = '168643123'
emp_value = inputn(emp_input, cats(length(emp_input),'.'));
run;
person Juan Dela Cruz    schedule 18.06.2019