SAS. Create range of macro variable. Создание массива макропеременных.

Всем добрый день!

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

  1. %Let
  2. Call symput
  3. Proc SQL  into
Сегодня поговорим как раз о последнем способе заведения макро переменных (proc sql), так как именно он позволяет создавать массив из этих самых переменных. 
В ниже предложенном примере будем помещать все переменные из некой таблицы в макро переменные, причем не важно сколько рассматриваемая таблица содержит строк. 
Для простоты эксперимента возьмем таблицу из библиотеке sashelp таблица Cars, таким образом вы сможете повторить приведенные примеры на своих платформах.
Обычно мы привыкли создавать макро переменные следующим образом:
Из приведенного лога видно, что в макро переменную a1 записалась лишь одна запись (Acura), являющаяся первой записью в таблице sashelp.cars
Данная ситуация нас не устраивает, мы все-таки хотели записать все интересующие нас данные из поля make

Поэтому видоизменим наш код, добавив после макро переменной код: separate by :
Вот теперь видно, что все наши уникальные значения поля make были записаны в одну макро переменную a1.
Хочу обратить внимание на еще одну макро переменную sqlobs — она очень полезна и хранит значение количества строк, которое пробежал наш запрос. 
Теперь все же вернемся к нашей теме статьи и создадим все же массив из макро переменных.
Для этого еще раз видоизменим наш код  поставив тире после нашей макро переменной.
Мы видим, что было выявлено 38 записей и все они были положены в макро переменные: a1,a2,a2,…,a37,a38.
Покажем это, выведя эти переменные в цикле с помощью следующего макроса:
Вы можете видеть, что наша макро переменная &sqlobs очень помогла в организации цикла. С помощью нее мы можем понять — а сколько же макро переменных мы создали нашим запросом.
Надеюсь данная урок оказался для Вас полезным.
Более подробную информацию можно получить здесь!
С уважением,
Николай.

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.