SAS Некоторых вопросы относительно оператора конкатенации ||

голоса
2

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

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

 proc print;

 run;

почему выход Joba еще FA?

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

Задан 20/10/2018 в 05:00
источник пользователем
На других языках...                            


1 ответов

голоса
4

символьные переменные DATA Шаг отличаются от строковых переменных в других языках кодирования. Каждая переменная 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 документации Шаг за шагом Программирование с помощью базы SAS, Объединение символов значения: Использование конкатенация

Ответил 20/10/2018 в 14:45
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more