#excel #sas
Вопрос:
С момента запуска моих базовых программ SAS в новой UTF-8
кодированной среде я сталкиваюсь с огромными проблемами производительности при экспорте данных через ODS excel
.
Экспорт более N записей для данного набора данных обычно приводит к зависанию сеанса SAS и требует перезапуска моего клиента.
Вот что я использую для тестирования, используя стандартный набор данных и создавая небольшой xlsx-файл (:
data test03;
set sashelp.zipcode;
if _N_ le 3000 then output;
run;
goptions device=png;
ods results=off;
ods excel
file = "/sas_p/gridshared/ch/eg_data/regel/group_hr/export/ods_export.xlsx"
options( flow = "tables" start_at = "A1" embedded_titles= "yes");
proc print data=test03 label noobs;
run;
ods _all_ close;
Я постепенно увеличиваю _N_
(строка 3) и получаю соответствующее увеличение процессорного времени. Однако после определенного момента (обычно в диапазоне 4 цифр для большинства наборов данных) программа просто застревает.
Для приведенного выше примера:
_N_ = 1000 rec → 00:00:09
_N_ = 2000 rec → 00:00:18
_N_ = 3000 rec → timeout
В старой latin1
кодированной среде такого поведения не наблюдается, где экспорт всех 40 тыс. записей из приведенной выше таблицы не представлял никаких проблем.
Есть какие-нибудь идеи о том, как решить эту проблему?
Комментарии:
1. Поднимите билет с помощью службы поддержки SAS.
2. Сколько это колонок? Насколько велик фактический файл, который он создает?
3. @Tom Мне стыдно сказать, что после повторных запросов с нашими ИТ — специалистами выяснилось, что они установили слишком низкий размер памяти, что не было видно мне как простому пользователю.
Ответ №1:
Что делать, если вы принудительно включили кодировку набора данных wlatin1
в свой сеанс, а также выходные данные ods wlatin1
?
data test03(encoding='wlatin1');
set sashelp.zipcode;
if _N_ le 3000 then output;
run;
filename excelout "/sas_p/gridshared/ch/eg_data/regel/group_hr/export/ods_export.xlsx"
encoding='wlatin1'
;
goptions device=png;
ods results=off;
ods excel
file = excelout
options(flow = "tables" start_at = "A1" embedded_titles= "yes")
;
ods excel close;