2013-07-08 41 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的许多优点之一是整个数据集被复制,包括可能存在的任何索引。此外,还可以保护您免受与使用与创建操作系统不同的操作系统上的数据集相关的问题。