Нет опции «ведение журнала» для опции включения / выключения SAS, которая автоматически идентифицирует участника / задание, создавшее наборы данных. SAS, установленный в операционных системах большого железа (мэйнфреймах) или, возможно, в OpenVMS, может автоматически делать это в ОС.
Знаете ли вы <path>
имен библиотек, использованных при создании новых наборов данных?
Один подход основан на find
опциях -newer
-новый файл
Файл был изменен позже, чем файл. Если файл является символической ссылкой и действует опция -H или -L, всегда используется время модификации файла, на который он указывает.
Итак, вы хотите
- начало работы - создать файл маркера
- конец задания - найдите файлы, более новые, чем файл маркера, и выполните для них команду
chown
Eaxmple:
libname joblib '~/myjobs/sasdata';
* create marker file;
%sysexec touch /tmp/job-start.tag
* sas code;
* chown and chmod each newer file;
%sysexec find ~/myjobs/sasdata -type f -newer /tmp/job-start.tag -exec chmod 755 {} \%str(;);
%sysexec find ~/myjobs/sasdata -type f -newer /tmp/job-start.tag -exec chown newower {} \%str(;);
Альтернативные способы помечать наборы данных SAS из задания
Идея состоит в том, чтобы отделить, пометить или пометить наборы данных таким образом, чтобы они отличались от других заданий
Способ 1. Задания создают независимые наборы наборов данных:
Создайте новую уникальную папку для каждого запуска:
- Используйте общий libref, такой как
JOB
, в исходном коде, но пусть он указывает на новую папку
- Запустите задание, создав новые наборы данных.
- Выполнить настройки после работы
- Переместить новые наборы данных в
PERM
, место их постоянного хранения
Способ 2. Источник задания зависит от наборов данных в PERM
и не может быть изменен :
Использовать конкатенацию пути к библиотеке:
- Изменить имя библиотеки до запуска задания
libname PERM ("<path-to-new-job-unique-folder">, "<path to actual PERM>")
;
- Новые наборы данных будут создаваться по первому пути объединения.
- Наборы данных после обработки, как обсуждалось ранее
Способ 3. Использование макропеременной для обозначения каждого набора данных в задании
- Изменить код задания с
DATA xyz; …
до
%let JOB_TIMESTAMP=%sysfunc(datetime()); %* this is a job 'tag' for job-unique identification;
%let JOB_LABEL=(label="JOBID:&JOB_LABEL");
DATA xyz &JOB_LABEL; …
- Размещать задание, используйте
PROC CONTENTS
или SQL DICTIONARY.TABLES
, чтобы определить наборы данных, имеющие & JOB_TIMESTAMP в метке.
Способ 4. Задания выполняются на сервере SAS, метки не могут быть изменены
- Обновите исходный код JOB, чтобы каждый набор данных, создаваемый заданием, получал соответствующую созданную заметку метаданных, которая содержит & JOB_TIMESTAMP.
- Опубликовать работу, отсканировать заметки метаданных на наличие & JOB_TIMESTAMP и настроить те из них, которые соответствуют.
Способ 5. Создание набора данных AUDIT для каждого набора данных, созданного заданием
- Поиск справки для «Понимания контрольного журнала»
- Опубликовать поиск работы в таблице аудита для тега задания
Другие способы
- Создайте собственную таблицу отслеживания для работы
- Источник JOB должен быть изменен, и макросы могут помочь обеспечить согласованность:
%macro jobtracker(data=, id=);
… insert into perm.jobtracker values ("&data", "&id") …
%mend;
…
%jobtracker(data=analysis1, id=&JOB_TIMESTAMP) %* manually track each table;
data analysis1;
…
- Опубликовать задание, обработать наборы данных для
PERM.JOBTRACKER
и &JOB_TIMESTAMP
.
Если вышеперечисленное не работает для вас, добавьте дополнительную информацию к вопросу:
- Как запускаются рабочие места?
- Насколько близко друг к другу по времени находятся старты?
- Сколько заданий выполняется параллельно?
- Могут ли задания сталкиваться при создании новых наборов данных или зависимости от них?
- Имеете ли вы полный контроль над применяемыми параметрами исходного кода и набора данных?