2013-07-08 42 views
1

我想將SAS數據集從SAS導出到FTP中。我可以使用以下命令導出csv文件(或txt文件):使用SAS將SAS數據導出到FTP中

%macro export_to_ftp(dsn= ,outfile_name=); 

Filename MyFTP ftp "&outfile_name." 
HOST='ftp.site.com' 
       cd= "&DATA_STRM/QC" 
        USER=&ftp_user. 
        PASS=&ftp_pass.; 

PROC EXPORT DATA= &dsn. OUTFILE= MyFTP DBMS=%SCAN(&outfile_name.,2,.) REPLACE; 
RUN; filename MyFTP clear; 
%mend; 

%export_to_ftp(dsn=lib1.dataset ,outfile_name=dataset.csv); 

但無法使用它導出SAS數據集。任何人都可以幫助我。

謝謝!

回答

4

PROC EXPORT不用於導出SAS數據集,它用於將SAS數據集轉換爲其他格式。您通常不會使用FTP文件名方法來傳輸SAS數據集;如果您打算從一臺SAS機器轉移到另一臺機器(如果您授權使用SAS/CONNECT並希望得到此幫助,請說明),或使用正常(OS)FTP進程傳輸文件,則要麼使用SAS/CONNECT。使用FTP文件名方法傳輸SAS文件(作爲二進制文件,讀取然後逐字節地寫入)在技術上是可行的,但這很容易出錯並且過於複雜。

如果您使用SAS驅動進程,最好的方法是在您的操作系統中編寫FTP腳本,然後使用x或%sysmd調用該腳本,並將文件名作爲參數傳遞。如果您包含有關操作系統的信息,可以輕鬆制定一些內容來幫助您。

注意:如果你在服務器上,你需要驗證你有'x'權限;這經常被鎖定。如果你不這樣做,你可能無法完全從SAS運行。

+0

非常感謝Joe!你的回答非常有幫助。我會盡力自己實施一些建議。如果我失敗了,我可以再次要求你的幫助。 – Beta

0

看你的代碼,你似乎已經忘了周圍& FTP_USER以及& ftp_pass引號(「)。 否則,你的代碼看起來還好我。

如果不這樣做的伎倆,一些錯誤消息會派上用場

另外請注意,您所使用的掃描,以確定DBMS是棘手:怎麼辦?如果將來的文件名中有(多)點你(最後一個點後的部分)都將-1的更好而不是2(第二個點之後的部分)作爲掃描功能的參數。

+0

謝謝你的答案Shorack。但我認爲這些問題不是你提到的問題。 – Beta

+0

@ user697363那麼,這是我最好的猜測。可悲的是,我現在沒有合適的環境來測試一下自己,弄清楚它。 – mvherweg

3

如Joe所說,您不使用PROC EXPORT創建要使用FTP傳輸的文件。交換SAS數據集最安全的方法是使用PROC CPORT來創建傳輸文件。這是你原來的宏的修改版本:

%macro export_to_ftp(dsn= ,outfile_name=); 

%let DBMS=%UPCASE(%SCAN(&outfile_name.,2,.)); 

%if &DBMS ne CSV and &DBMS ne TXT and &DBMS ne CPT %then %do; 
    %put &DBMS is not supported.; 
    %goto getout; 
    %end; 

%if &DBMS=CPT %then %do; 
filename MyFTP ftp "&outfile_name." 
    HOST='ftp.site.com' 
    cd= "&DATA_STRM/QC" 
    USER=&ftp_user. 
    PASS=&ftp_pass. 
    rcmd='binary'; 
PROC CPORT DATA= &dsn. 
    FILE = MyFTP; 
RUN; 
%end; 

%else %do; 
filename MyFTP ftp "&outfile_name." 
    HOST='ftp.site.com' 
    cd= "&DATA_STRM/QC" 
    USER=&ftp_user. 
    PASS=&ftp_pass. 
    rcmd='ascii'; 

PROC EXPORT DATA= &dsn. 
    OUTFILE= MyFTP 
    DBMS= &dbms REPLACE; 
RUN; 
%end; 

filename MyFTP clear; 

%getout: 

%mend; 

%export_to_ftp(dsn=lib1.dataset ,outfile_name=dataset.csv); 
%export_to_ftp(dsn=lib1.dataset ,outfile_name=dataset.cpt); 

按照慣例,這將使用cpt文件擴展名,以確定您要創建的SAS傳輸文件。誰接收文件將使用PROC CIMPORT將文件轉換回SAS數據集:

filename xpt 'path-to-transport-file'; 
proc cimport data=dataset infile=xpt; 
run; 
filename xpt clear; 

需要注意的是SAS傳輸文件應轉移爲二進制文件;另兩種格式是文本文件;因此不同的filename聲明。

使用PROC CPORT的許多優點之一是整個數據集被複制,包括可能存在的任何索引。此外,還可以保護您免受與使用與創建操作系統不同的操作系統上的數據集相關的問題。