2013-11-08 1 views
3

У меня есть «широкие» наборы данных SAS, которые каждую неделю нужно экспортировать в новую книгу Excel. Я хочу каждую неделю сохранять ширину столбцов и другие атрибуты Excel, но у меня возникают проблемы с ее работой. Вот что я пытаюсь.Как создать «стандартизованные» книги Excel с использованием SAS

  1. Я использовал PROC ЭКСПОРТИРОВАТЬ, чтобы создать новую рабочую книгу (с помощью листов = "New_TACs").
  2. Я вручную отрегулировал ширину столбцов и другие атрибуты листа (например, «фильтры», ширины столбцов, обертывание, выравнивание и «замораживание окон»).
  3. Я удалил все строки данных (оставив первую строку с именами столбцов ) и сохранил ее как новую книгу под названием «template.xlsx».
  4. Используя системный вызов SAS, я копирую «template.xlsx» в «this_week.xlsx». Я снова использую PROC EXPORT, чтобы попытаться обновить новую книгу, но я получить предупреждения. Результат содержит лист с именем «New_TACS1».

Вот лог SAS:

720 proc export data=new_tacs 
721  outfile="\\server-path\this_week.xlsx" 
722  replace; 
723  sheet='New_TACs'; 
724 run; 

WARNING: The target file may contain unmatched range name and sheet name. 
WARNING: The target file may contain unmatched range name and sheet name. 
WARNING: File _IMEX_.New_TACs.DATA does not exist. 
WARNING: Table _IMEX_."New_TACs" has not been dropped. 
NOTE: "New_TACs" range/sheet was successfully created. 
NOTE: PROCEDURE EXPORT used (Total process time): 
     real time   23.88 seconds 
     cpu time   1.80 seconds 

Я в недоумении, что делать, и будет признателен за любые идеи или предложения.

ответ

1

Я думаю, проблема в том, что с нулевыми строками SAS неправильно обрабатывает данные. Я не могу заставить PROC EXPORT работать вообще, но с одним манекеном я могу по крайней мере заставить его вести себя с libname и PROC APPEND. Я не удивлюсь, если за это частично отвечают фильтры.

После создания заготовки первенствует файл со столбцами SASHELP.CLASS, добавив фильтр, добавив одну строку фиктивных данных и сохранение/закрытие, я: (SCANTEXT = NO является обязательным здесь для доступа к обновлению)

libname newtac "c:\temp\test.xlsx" scantext=no getnames=yes; 

proc append base=newtac.'New_TACs$_xlnm#_FilterDatabase'n data=sashelp.class force; 
run; 

libname newtac clear; 

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

Лучшим решением может быть ждать 9.4 TS1M0 и ODS EXCEL, что позволит вам делать все это от SAS напрямую; или использовать DDE.

1

Я бы порекомендовал проверить SaviCells. http://www.sascommunity.org/wiki/SaviCells. Он обеспечивает гораздо лучшую функциональность SAS для Excel, включая создание шаблона со всем форматированием Excel и использование его с новыми данными.

0

Используйте DDE в SAS для достижения этой цели.

Вы можете создать свой шаблон Excel так, как хотите. Использование DDE вы бы тогда:

  1. Открыть Excel
  2. Откройте Excel файл, который вы хотите использовать в качестве шаблона
  3. Заполняем его с обновленными данными
  4. Сохранить файл в качестве нового файла

Это немного устаревшая технология, но она выполняет свою работу.

Googling для SAS и DDE найдет много примеров кода и учебников.

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