2015-04-22 1 views
1

В SAS ГНР, я хочу, чтобы ссылаться на имя задания в коде. Я знаю, что глобальная переменная etls_jobName содержит эту информацию, но когда я присваиваю это значение полю и просматриваю вывод, я получаю «.».Реферирование путь работы и имя в SAS ГНР

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

Большая благодарность.

+4

Я знаю ноль о DIS, b ut is etls_jobName, возможно, макро переменная вместо переменной данных? '" & etls_jobname. "' возможно? – Joe

+1

Я эхо, что @Joe говорит, убедитесь, что вы помещаете кавычки вокруг макропеременной. Кроме того, тот факт, что вы получаете. в поле говорит мне, что вы можете назначить значение символа в числовое поле. Убедитесь, что поле является символом и достаточно длинным, чтобы сохранить значение & etls_jobName. – DomPazz

+0

Спасибо! Это отлично работало для задания. Любые идеи о иерархии папок? – Rookatu

ответ

2

Для пути метаданных потока задания, вы можете попробовать использовать следующий код. Код подхватывает имя задания из & etls_jobName макропеременной и извлекает метаданные путь к папке задания. Чтобы узнать больше о функциях, которые используются, обратитесь к интерфейсам языка SAS к метаданным. Надеюсь это поможет!

data path_output; 
    length jobName $ 100 uri headuri $ 256 jobPath head_path $ 500 ; 

    jobName="&etls_jobName"; 
    rcJob =metadata_getnobj("omsobj:[email protected] ='&etls_jobName'",1,uri); 
    rcHead=metadata_getnasn(uri,"Trees",1,headuri); 
    rcPath=metadata_getattr(headuri,"Name",jobPath); 

    rcHead = 1; 
    do while(rcHead>0); 
     rcHead=metadata_getnasn(headuri,"ParentTree",1,headuri); 
     rcPath=metadata_getattr(headuri,"Name",head_path); 

     if (rcHead>0) then jobPath = catx('/',head_path,jobPath); 
    end; 

    output; 
    keep jobName jobPath; 
run; 

proc print; 
run; 

UPDATE:

Если Job Flow URI должен быть выбран на основе имени потока Работа затем использовать то, что показывают в коде выше, а именно:

rcJob =metadata_getnobj("omsobj:[email protected] ='&etls_jobName'",1,uri); 

Если работы потока URI необходимо выбрать на основе идентификатора метаданных, а затем использовать:

rcJob =metadata_getnobj("omsobj:[email protected] ='&jobID'",1,uri); 
+0

Это сработало великолепно! Еще раз спасибо. Единственное, что мне нужно было сделать, это конкатенация jobPath с ''/''перед циклом, но это было именно то, что мне нужно. +1 – Rookatu

+0

oh только что понял, что в коде есть опечатка, поэтому вам пришлось добавить «/». Я написал кошек вместо catx. Я обновил код. – sushil

+0

Эй, Сушил. Я просто столкнулся с каким-то неожиданным поведением с этим кодом: если две разные папки имеют задание с тем же именем, то путь, сгенерированный этим кодом, может быть путем неправильного задания. Я предполагаю, что он ищет имя листа в структуре папок, которое соответствует имени задания, затем строит оттуда, но есть несколько листов с тем же именем. Любая идея, как исправить это, не навязывая соглашение об именах на рабочих местах? Благодаря! – Rookatu

Смежные вопросы