2014-10-10 1 views
0

У меня есть большой набор данных, насчитывающий около 100 имен менеджеров. Теперь мне нужно экспортировать данные по имени менеджера, чтобы у меня был один набор данных для каждого менеджера. Я могу использовать макрос, чтобы создать отдельный набор данных для каждого менеджера (по существу, категория), используя код:Как экспортировать набор данных SAS в XLSX, по категориям, используя макропеременные?

%macro break(byval);                                 
    data &byval;                
     set final(where=(Project_Manager_Name="&byval"));        
    run;                                     
%mend;                  

data _null_;                 
    set final;                
    by Project_Manager_Name;                 
    if first.Project_Manager_Name then 
    call execute(%nrstr('%break('||trim(Project_Manager_Name)||')'));    
run; 

Это где я застрял. Мне просто нужно .xlsx файлы каждого и включают имя менеджера в конце каждого имени файла, например:

proc export 
    data = final 
    dbms = xlsx 
    outfile = "&OUTPUT.\Final_Report_ManagerName.xlsx" 
    replace; 
run; 

Я предполагаю, что я ставлю макропеременную в &byval где-то в Outfile имени, но я все еще получая ошибки, что это не ссылка. Любое понимание?

+1

Переместите свой экспорт proc в свой прерывистый макрос, замените все на имя менеджера в outfile. – Reeza

ответ

0

Чтобы использовать PROC EXPORT, вам нужно будет написать макрос и вызвать PROC EXPORT 100 раз. Это не фантастический метод. Вы также можете использовать LIBNAME для выполнения одной и той же функции, но вместо 100 вызовов экспорта на вашем шаге данных есть 100 имен наборов данных и 100 условных блоков select/when/output, определяющих, что делать с данными каждого менеджера.

Лучшие способы:

  • Если у вас есть 9.4M1, вы можете использовать ODS EXCEL, чтобы сделать это. Посмотрите ODS EXCEL, а затем у вас есть новый лист для каждой группы с помощью параметра sheet_label для определения имени листа из переменной. Этот параметр совпадает с ODS TAGSETS.EXCELXP (как и большинство ODS EXCEL).
  • Если вы этого не сделаете, вы можете использовать метод вывода хэш-объекта, чтобы сделать это немного более эффективно, хотя все же не идеально - по крайней мере, это не потребует тонны макропрограммирования.

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

proc export 
    data = &byval. 
    dbms = xlsx 
    outfile = "&OUTPUT.\Final_Report_&byval..xlsx" 
    replace; 
run; 

Для этого необходимо войти в макрос% break. Вы также можете пропустить шаг данных в байле и просто добавить WHERE к экспорту, data=final(where=(Project_Manager_Name="&byval")).

+0

Спасибо, Джо! Если бы это было прямо до того, как я проверил ваш комментарий - этот второй период после & byval получил меня в первый раз, так что все мои имена сначала имели xlsx. Хорошая вещь. – Foxer