Как сделать цикл работы SAS DIS над строками таблицы параметров
У меня есть работа SAS DIS, которая извлекает и обрабатывает некоторые данные с метками времени. Характер работы таков, что данные должны обрабатываться поочередно, месяц за месяцем. Я могу использовать временной фильтр, чтобы гарантировать, что любой данный прогон находится в пределах требуемого периода времени, но затем я должен вручную изменить параметры этой таблицы и перезапускать задание, месяц за месяцем, пока все данные не будут обработаны.
Так как временные рамки простираются довольно далеко, я бы хотел максимально автоматизировать этот процесс. В идеале у меня была бы таблица, которая имеет следующую форму:
time_parameter_1 time_parameter_2
2JAN2010 1FEB2010
2FEB2010 1MAR2010
... ...
которая может быть частью итеративного задания, которое продолжает выполнять мое задание обработки со значениями этой таблицы в качестве временных параметров, пока таблица не будет исчерпана.
Из того, что я понимаю, преобразование цикла в SAS DIS предназначено для циклического перемещения по таблицам, а не по строкам таблицы. Является ли решение поместить каждую дату в отдельную таблицу, или есть прямой способ добиться этого?
Большая благодарность
РЕДАКТИРОВАТЬ
Итак, с помощью сообщения Сушила я нашел решение. Во-первых, кажется, что SAS DIS требует, чтобы параметры даты были переданы в виде текста, а затем преобразованы в желаемый формат даты (по крайней мере, это единственный способ, которым я мог заставить вещи работать).
Процедура выглядит следующим образом:
В виде сетки задания, которое будет зациклено, щелкните правой кнопкой мыши и выберите "Свойства". Перейдите на вкладку "Параметры" и выберите "Новая группа". Назовите параметр на вкладке Общие (давайте использовать control_start_date
) и на вкладке Тип подсказки и значения выберите Тип подсказки "Текст". Нажмите OK и добавьте любые другие параметры, используя тот же метод (скажем, control_end_date
это еще один параметр).
Создайте управляющее задание, которое зациклится на параметризованном задании. Импортируйте или создайте таблицу параметров (дат) для зацикливания. Это должны быть символьные представления дат.
Подключите таблицу параметров к преобразованию Loop, подключите параметризованное задание к правому концу преобразования Loop и подключите правый конец параметризованного задания к преобразованию Loop End.
Щелкните правой кнопкой мыши преобразование Loop и выберите Свойства. Выберите вкладку "Сопоставление параметров" и правильно сопоставьте столбцы даты контрольной таблицы с параметрами параметризованного задания (control_start_date
а также control_end_date
). На вкладке Столбцы целевой таблицы убедитесь, что столбцы параметров сопоставлены с целевой таблицей. Выберите ОК.
В параметризованном задании создайте преобразование пользовательского кода. Создать столбцы start_date
а также end_date
(тип DATE9.
) и заполните выходную рабочую таблицу, используя следующий код:
DATA CONTROL_DATES;
start_date = input(trim("&control_start_date"),DATE9.);
end_date = input(trim("&control_end_date"),DATE9.);
RUN;
Соедините даты в рабочем столе WORK.CONTROL_DATES
к логике работы (возможно, с объединением), чтобы они служили фильтрами в нужном объеме. Сохраните параметризованную работу.
Теперь запуск контрольного задания должен иметь возможность циклически выполнять задание, используя указанные фильтры даты.
Многое из этого описано в следующем PDF, но я не уверен, как долго эта ссылка будет существовать, и некоторые из проблем, с которыми я столкнулся, там не рассматривались.
1 ответ
Ваше понимание о преобразовании LOOP неверно. Вам не нужна отдельная таблица для преобразования цикла, чтобы сделать ваш параметризованный цикл потока работ. Таблица с параметрами времени может быть входом для преобразования цикла, а параметризованное задание может зацикливаться на основе управляющей таблицы (входной таблицы для преобразования цикла).
Вот пример использования циклического преобразования, которое отличается от упомянутого в документации SAS DI Studio и имеет отношение к вашей проблеме: PDF
Дайте мне знать, если это поможет!