SAS Некоторые вопросы относительно оператора конкатенации || - PullRequest
0 голосов
/ 20 октября 2018

У меня есть вопрос, касающийся следующей программы в SAS.

 data staff;
      jobA='FA';
      jobB='1';
      jobA=jobA||jobB;
 run;

 proc print;

 run;

, почему вывод задания A все еще FA?

Я думаю, что он должен быть обновлен, но для некоторыхпричина, по которой он остается тем же ... Должен ли он что-то делать с оригинальной длиной jobA, когда он был впервые определен?

1 Ответ

0 голосов
/ 20 октября 2018

ДАННЫЕ Переменные шага отличаются от строковых переменных в других языках кодирования.Каждая переменная шага DATA имеет фиксированную длину.Переменные длины могут быть:

  • явно объявлены (перед первым использованием) с оператором LENGTH или ATTRIBUTE,
  • «унаследованы» от набора данных, передаваемых через SET, MERGE, UPDATE или MODIFY,
  • или выводятся контекстуально с момента их первого использования в программе шагов данных.

Как правильно ответил Крис Дж в своемкомментарий, jobA будет иметь длину $ 2, потому что его первое использование является контекстным, как 'FA', который имеет два символа.Аналогичным образом, jobB будет иметь длину $ 1.

Для вашего конкретного вопроса результат конкатенации имеет длину 3 символа и сохраняется в переменной из 2 символов.Автоматическое усечение (без сообщений журнала) происходит, когда результат сохраняется в переменной.

Все символьные переменные неявно заполняются хвостом с пробелами по длине, что является важным фактором при конкатенации, иногда при конкатенацииВы почесаете голову и спросите, где остальная часть результата? или почему так много пробелов перед последующими частями?

Оператор конкатенации (||) не обрезает конечные пробелы, когдаобъединяя ценности.Это может вызвать путаницу, когда целевая переменная недостаточно длинна, чтобы содержать длины всех объединяемых переменных - конкатенация будет выглядеть «не произошло».В великие старые времена кодовый код trim(left(variable-1))||trim(left(variable-2))||..||trim(left(variable-n)) использовался, чтобы избежать этой ситуации.

Сегодня SAS имеет семейство функций конкатенации (cat, cats, catt, catx, catq), которые немного упрощают комбинирование символьных выражений.

Рассмотрим чтение документации SAS Пошаговое программирование с помощью Base SAS, Объединение символьных значений: использование конкатенации

...