我目前進口Stata -created .dta文件到SAS下列要求:導入壓縮文件DTA與SAS
proc import datafile='myfile.dta' out=test dbms=dta replace;
run;
爲了備份文件時節省空間和帶寬,我想只保留dta文件的壓縮版本。我可以使用SAS「即時」讀取壓縮的dta文件嗎?
我已經試過:
filename foo pipe 'gunzip -c myfile.dta.gz';
proc import datafile=foo out=test dbms=dta replace;
run;
但SAS說ERROR: Random access not allowed.
我也試過proc cimport
,但這似乎並不支持.dta文件。我確信我可以使用x
命令在程序底部解壓縮然後刪除,但希望有一個更清晰的解決方案,因爲我會詢問另外50個SAS/Stata/R程序員來實現它。
我們在64位Linux上運行SAS 9.2 ts2m3。
UPDATE
@Joe提供爲什麼PROC進口不帶管工作的.dta
文件的一些很好的見解,並提出了「臨時解壓」。
SAS
我打算把這個在一個宏,使用戶可以通過簡單的宏調用導入dta.gz
。
* import file ;
x gunzip -c /home/banjer/data/myfile.dta.gz > /home/banjer/data/myfile.dta ;
proc import datafile="/home/banjer/data/myfile.dta" out=mydata dbms=dta replace;
run;
* delete temp uncompressed file ;
x rm /home/banjer/data/myfile.dta ;
* save file ;
proc export data=mydata dbms=dta
file="/home/banjer/data/jtest.dta"
dbms=dta replace;
run;
x gzip /home/banjer/data/jtest.dta ;
塔塔
我發現了兩個Stata的模塊here使用和保存gzip壓縮文件。命令是guse
和gsave
。請注意,尾隨的「.gz」需要保留,這有點煩人。好的一面是,如果myfile.dta沒有被壓縮,那麼guse
仍然會讀入。這使我們的分析師可以用guse/gsave替換任何現有的use
和save
命令。
// import
guse "/home/banjer/data/myfile.dta"
// save
gsave "/home/banjer/data/myfile.dta"
這與R沒有任何關係...... –
我不清楚他是否打算針對R提出同樣的問題,或者是否有針對R的不同解決方案(請閱讀最後一個完整段落) 。 – Joe
謝謝,我不應該包含那個'r'標籤。我可能會在後面問同樣的問題:所以我不想在一個問中問太多問題。 – Banjer