2014-01-09 5 views
1

Другой вопрос. У меня есть несколько наборов данных, которые генерируют вывод, как можно вывести их в один рабочий лист excel и применить мое собственное формирование. Например, я набор данных 1, набор данных 2, набор данных 3вывод нескольких наборов данных в книгу excel

each data set has two coloumns, for example 
Col 1 Col 2 
1 2 
3 4 
5 6 

Я хочу, чтобы каждый набор данных, чтобы быть в одном листе и разделённых колонке, поэтому в Excel он должен выглядеть

Col 1 Col 2 Blank Col Col 1 Col 2 Blank Col 

Сомон сказал, что мне нужно, чтобы посмотреть на DDE для этого это правда

с уважением,

ответ

1

Вы, безусловно, можете сделать это с помощью DDE. Что делает DDE, он просто имитирует клики пользователя в меню, кнопках, ячейках Excel и т. Д. Вот пример того, как вы можете сделать это с помощью цикла макросов для 3 наборов данных с именами has1, have2 и have3. Если вам требуется более общее решение (неизвестное количество наборов данных, с различным количеством переменных, именами случайных наборов данных и т. Д.), Код должен быть обновлен, но его «DDE-часть» будет практически одинаковой. Еще одно предположение - ваша книга Excel должна быть открыта во время выполнения кода. Хотя он также может быть автоматизирован - можно запустить Excel, и файл можно открыть с помощью самого DDE. Вы можете найти очень хорошее введение в DDE here, где все эти трюки обсуждаются в деталях.

data have1; 
    input Col1 Col2; 
datalines; 
1 2 
3 4 
5 6 
; 
run; 
data have2; 
    input Col1 Col2; 
datalines; 
1 2 
3 4 
5 6 
7 8 
; 
run; 
data have3; 
    input Col1 Col2; 
datalines; 
1 2 
3 4 
7 8 
5 6 
9 10 
; 
run; 



%macro xlsout; 

/*iterating through your datasets*/ 
%do i=1 %to 3; 

    /*determine number of records in the current dataset*/ 
    proc sql noprint; 
     select count(*) into :noobs 
     from have&i; 
    quit; 

    /*assign a range on the workbook spreadsheet matching to data in the current dataset*/ 
    filename range dde "excel|[myworkbook.xls]sas!r1c%eval((&i-1)*3+1):r%left(&noobs)c%eval((&i-1)*3+2)" notab; 

    /*put data into selected range*/ 
    data _null_; 
     set have&i; 
     file range; 
     put Col1 '09'x Col2; 
    run; 
%end; 

%mend xlsout; 
%xlsout 
+0

вы чемпионом спасибо alot –

+0

эй ваш цикл делать, как вы итерации по наборам данных, которые вы итерируете по номерам от 1 до 3 –

+0

Я использую 'have & i' построить в PROC SQL и DATA шаг. Он создает имена 'has1',' have2' и 'have3'. –

0

Вы не можете сделать именно это с SAS (DDE, вероятно, возможно). Я бы предложил посмотреть SaviCells Pro.

http://www.sascommunity.org/wiki/SaviCells

http://www.savian.net/utilities.html

+0

спасибо за помощь, поэтому я не могу это сделать без использования внешних пакетов программного обеспечения. В sas вы можете напрямую экспортировать в sas, но я не уверен, как манипулировать вашими выходными данными в sas, пока вы портируете его. –

0

Вы, вероятно, может сделать то, что вы просите через ODS TAGSETS.EXCELXP или новый ODS EXCEL (9.4 TS1M1). Вам нужно будет заранее расположить наборы данных (т. Е. Объединить их или перенести или еще не получить один набор данных с правильными столбцами), либо использовать PROC REPORT или какую-либо другую процедуру, чтобы получить их в нужном формате.