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

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

Однако у меня возникла ошибка при таком подходе.

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

Перед кодом:

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;

Iожидаем, что в результате символ '168643123' будет преобразован в числовой 168643123.

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

Ответы [ 4 ]

2 голосов
/ 17 июня 2019

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

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;
1 голос
/ 17 июня 2019

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

emp_value = input(emp_input,32.);

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

emp_value = inputn(cats(emp_input,'XXX'),cats(length(emp_input),'.'));
1 голос
/ 17 июня 2019

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

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

0 голосов
/ 18 июня 2019

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

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