2015-09-03 2 views
1

Я один большой набор данных, который определяет метаданные для переменных через наборы данных в различных libnames (вытянут из sashelp.vcolumn.Создание нескольких программ SAS с помощью `filename` заявления

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

data _null_ ; 
    set metadata end=eof ; 
    by libname memname ; 
    file sascode ; 

    if first.libname then put "proc datasets lib=" libname " nolist ;"; 
    if first.memname then put " modify "memname ";"; 
    if last.libname then put " run; 
    if eof then   put "quit ;"; 
run ; 

можно ли перенаправить оператор file в правильный каталог f или каждый first.libname?

+0

Когда вы говорите 'переадресация имени файла ', вы имеете в виду сделать новый файл каждый раз при изменении имени libname? – Joe

+0

Привет, Джо, спасибо, да, я пытаюсь создать уникальную программу, написанную в каждом каталоге libname. – Bendy

+0

Вы посмотрели параметр filevar в заявлении файла? – Reeza

ответ

1

Чтобы расширить ответ Reeza немного, вот как вы могли бы сделать это с помощью метаданных в dictionary.libnames. Здесь я использую dictionary.tables, но если вам нужно использовать .columns, чтобы получить (независимо от того, что вы делаете со столбцами), который должен работать так же хорошо.

libname temp 'c:\temp'; 
data class temp.class; 
set sashelp.class; 
run; 

proc sql; 
    create table metadata as 
    select T.libname, T.memname, L.path 
    from dictionary.tables T, dictionary.libnames L 
    where T.libname=L.libname 
    and T.memname='CLASS' 
    and level=0 /* this eliminates SASHELP lib which is a bit crazy */ 
    ; 
quit; 


data _null_ ; 
    set metadata end=eof; 
    by libname path memname ; 
    fn = cats(path,'\sasfile.sas'); 
    file sascode filevar=fn; 

    if first.libname then put "proc datasets lib=" libname " nolist ;"; 
    if first.memname then put " modify " memname ";"; 
    if last.libname then put " run; quit;"; 
run ; 
+0

Спасибо, Джо - потянувшись по дорожкам со словарных таблиц тоже - отлично :-) @ Reeza спасибо тоже - я тоже поддержал. Джо, просто из интереса - почему ты говоришь «... SASHELP lib, который немного сумасшедший»? – Bendy

+1

SASHELP - это объединенная библиотека, в которой есть 11 каталогов (или около того). Таким образом, у вас будет много файлов, созданных для этого. – Joe

2

Используйте опцию FILEVAR в заявлении файла.

От SAS KB24599: http://support.sas.com/kb/24/599.html

/* Create sample data */ 

data test; 
    input color $ num; 
datalines; 
blue 1 
blue 2 
blue 3 
green 4 
green 5 
red 6 
red 7 
red 8 
; 

data _null_; 
    length fname $30.; 
    set test;  
    by color;            
    if first.color then count+1; 
    fname="C:\TEMP\file" || trim(left(put(count,8.)))||".txt"; 
    file dummy filevar=fname; 
    put color num count; 
run; 
Смежные вопросы