2015-07-01 9 views
3

Я запускаю программу макросов для анализа набора данных. В конце моего макроса я использовал инструкцию ODS и отчет proc для экспорта моих результатов. Я хочу: каждый раз, когда я запускаю макропрограмму с новым набором данных, результаты будут обновляться на новом листе в том же файле Excel, без удаления листов старых наборов данных или старого файла Excel. Пожалуйста, помогите мне.Обновление вывода Excel с использованием ODS?

+0

возможного интереса: http://support.sas.com/resources/papers/proceedings13/143-2013.pdf – C8H10N4O2

+0

@ C8H10N4O2 Спасибо, но я думаю, что это работает только в том случае, если я запустил все свои инструкции ODS в том же макросе, перед тем как закрыть основные ОРВ. Я хочу обновить файл Excel после закрытия макропрограммы и инструкции ODS. – buiquanghai

+0

@ C8H10N4O2 На странице 2 документа было сказано, что мы не можем использовать методы, описанные в документе, для обновления существующей книги. – buiquanghai

ответ

0

Основной способ приблизиться к этому заключается в том, что основной оператор ods tagsets.excelxp вне макросов итераций. Затем контролируйте только лист внутри макроса.

Скажем, у вас есть:

%macro run_me(sheet=,sex=); 
    ods tagsets.excelxp options(sheet_name="&sheet."); 
    proc print data=sashelp.class; 
    where sex="&sex."; 
    run; 
%mend run_me; 

ods tagsets.excelxp file="c:\temp\test.xml"; 
    %run_me(sheet=Male,sex=M); 
    %run_me(sheet=Female,sex=F); 
ods tagsets.excelxp close; 

Вы просто должны быть осторожны с выходом в остальной части анализа; вам может понадобиться использовать ods select заявления так:

ods tagsets.excelxp select none; 

в начале макроса, а затем, когда вы хотите, чтобы снова начать вывод

ods tagsets.excelxp select all; 

(Или просто выбрать конкретный вывод, который вы хотите, конечно.)

+0

Спасибо, Джо. Я думаю, мы близки. Но мне интересно, можем ли мы сделать код более автоматическим? Например: В макросе run_me я удалю инструкцию Where и добавлю макро переменную для data_input: run_me (sheet =, data_input =). Затем в следующем объявлении тегов ODS я не хочу вручную вручную вручную запускать% run_me для всех моих наборов данных. Итак, если у меня есть библиотека, содержащая все мои наборы данных, есть ли у SAS функция, которая будет автоматически анализировать все наборы данных в этой библиотеке один за другим? – buiquanghai

+0

Например, если мы можем подсчитать количество наборов данных в библиотеке, тогда вызовите каждый набор данных в этой библиотеке по порядку (1 2 3 4 ...), что позволит нам выполнить цикл. – buiquanghai

+0

Хорошо, я нашел его, я проверяю код, после чего я обновлю вопрос, если я найду ответ. – buiquanghai