将具有100,000列的sas数据集打印到excel文件中

时间:2013-06-25 09:09:21

标签: sas

我需要在excel文件中打印一个包含100,000行* 100,000列的sas数据集。 Proc导出或ODS html语句正在破坏,因此无法打印相同的内容。

文件语句中的数据能够打印相同的内容。但是,由于它们的逻辑记录长度限制,打印不正确,基本上我的一行被分解为3行。 在数据处理方面是否有出路或这是SAS的限制?

2 个答案:

答案 0 :(得分:6)

不是SAS的限制,而是Excel的限制,它可以处理多达16384列和最多约100万行,具体取决于版本。 Excel并不意味着处理如此规模的数据集;使用适当的数据库。

答案 1 :(得分:3)

你肯定无法在任何系统中将其变为excel。

您应该可以将其转换为其他格式,例如文本文件。例如:

data mydata;
array vars[100000];
do _n_=1 to 10;
 do _t = 1 to dim(vars);
  vars[_t]=_t;
 end;
 output;
end;
drop _t;
run;

data _null_;
file "c:\temp\myfile.csv" dlm=',' lrecl=2000000;
set mydata;
put _all_;
run;

* put all 对此没有真正起作用,但由于我不知道您的变量名称或设置我无法真正为您提供更好的解决方案;您很可能使用快捷方式来定义put语句。;

最大LRECL值取决于您的操作系统,但我认为其中大部分都可以处理一两百万。当然Win7可以。您也可以将PROC EXPORT用于csv,但是您必须从日志中获取(300k行)代码并将LRECL修改为更大,因为它默认为32767,我认为您不能修改它在过程中。

SAS / IML也允许另一种选择。我不确定你是否真的可以在任何合理的系统上做100k * 100k(如果它是数字8字节矩阵元素,你需要存储800亿字节......)

proc iml;
x=j(1e5,1e5,12345);

filename out ’c:\temp\myfile.csv’;
file out lrecl=800000;
do i=1 to nrow(x);
  do j=1 to ncol(x);
   put (x[i,j]) 5.0 +5 ',' @;
  end;
put;
end;
closefile out;
quit;

编辑:似乎IML中的lrecl语句表现不正常,或者我在这里做错了 - 但这可能是我系统的错误。即使lrecl显然足够长,我也会得到缓冲区溢出。