2015-04-14 208 views
0

我正在使用gzip壓縮功能處理unix服務器上的大文件,並且爲了空間目的而希望文件保持壓縮。我知道如何讀取壓縮的txt文件,但會想要: 1)壓縮從壓縮的txt文件創建的數據集 2)稍後將此壓縮的sas數據集設置在另一個datastep /過程中。讀取壓縮的sas數據集並將它們即時壓縮

這可能嗎?如果是這樣,請修改下面的代碼,這是我希望做什麼:

libname lib "path"; 
filename txtfile PIPE "gzip -dc filepath"; 

data lib.ds1; **would like this to be a zipped sas dataset**; 
    infile txtfile dlm="|" missover dsd; 
    input *columns*; 
run; 
data lib.ds2; **would like this to be a zipped sas dataset**; 
    set lib.ds1; *setting the zipped sas dataset; 
run; 
+0

另請參閱相關的[這裏的問題](http://stackoverflow.com/questions/18457033/is-there-a-way-to-zip-a-from-from-within-a-sas-script-沒有啓用-XCMD);其中一些概念也可能起作用。 – Joe

回答

2

嘗試從SAS會話執行GZIP命令。

data _null_; 
    command = 'gzip -c /path/ds2.sas7bdat > /path/ds2.sas7bdat.gz'; 
    call system (command); 
run; 

出於測試目的,請保留-c選項。這樣您可以保留原始文件並將其與新壓縮的文件進行比較。

+1

請注意,這需要'OPTIONS XCMD',它在SAS的服務器實例中默認處於關閉狀態。 – Joe

2

SAS不能SAS數據集存儲在壓縮格式(* .7z壓縮/ * .GZIP/* .zip文件等),使用簡單datastep像你要。您需要使用外部zip實用程序(使用x語句等)或使用ods包。單獨的邏輯需要分別編碼,以便在分別讀取和讀取SAS數據集之前對zip文件進行解壓縮和壓縮。

雖然SAS具有內置的壓縮​​數據集的能力,但使用COMPRESS =數據集選項或系統選項創建的數據集可壓縮數據文件。壓縮非常好。

OPTIONS COMPRESS=(YES|CHAR|BINARY) 

DATA MYSASDATA(COMPRESS=YES|CHAR|BINARY); 

你可以閱讀更多關於算法語言參考使用SAS來壓縮數據集。

參閱從SAS語言參考以下鏈接瞭解詳細:http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000202890.htm

+2

壓縮是好的,但它不如Zip壓縮或類似。我記得有一個項目,我的數據集是未壓縮的10GB,壓縮了2GB,壓縮了10MB。 (很多稀疏的數據。) – Joe