SAS ODS Excel与UTF-8会话编码与Latin1



自从在新的UTF-8编码环境下运行我的SAS基础程序以来,我遇到了大量通过ODS excel导出数据时的性能问题。

为给定的数据集导出超过N条记录通常会导致sas会话冻结,并且需要我重新启动客户端。

以下是我用于测试的内容,使用标准数据集并创建一个小的xlsx-File (<1MB):
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行),得到相应的cpu时间增加。然而,超过某一点(通常在大多数数据集的4位范围内),程序就会卡住。

对于上面的例子:

_N_ = 1000 rec → 00:00:09
_N_ = 2000 rec → 00:00:18
_N_ = 3000 rec → timeout

在旧的latin1编码环境中没有这种行为,导出上述表的所有40k记录没有任何问题。

对于如何解决这个问题有什么想法吗?

如果您在会话中强制数据集编码为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;

最新更新