2013-06-25 56 views
0

我需要将具有100,000行* 100,000列的sas数据集打印到excel文件中。 Proc导出或ODS html语句正在中断,因此无法打印。将excel文件中有100,000列的sas数据集打印到

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

+2

一旦这个庞大的数据集在excel中,您将如何处理它? – sasfrog

+0

但即使制表符或逗号分隔的文本文件也是这样做的....据我所知,文本文件不应该有任何这样的限制 – user2516102

+0

我需要测试我的矩阵分解逻辑....... .. – user2516102

回答

6

不是SAS的限制,而是Excel的限制,它可以处理高达16384列和高达约100万行,具体取决于版本。 Excel并不是要处理这个数量级的数据集;使用适当的数据库。

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语句。

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

SAS/IML也将允许另一种选择。我不知道你能真正做到100K * 100K任何合理的系统上(如果它是数字8个字节的矩阵元素,你在存储需要80个十亿字节...)

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显然足够长,我也会得到缓冲区溢出。