2013-06-25 53 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顯然足夠長,我也會得到緩衝區溢出。