使用FTP和SAS将文件从Windows传输到AIX,然后将其读入

时间:2014-09-08 13:01:39

标签: ftp sas

在网站上,我在SAS工作,在AIX上运行,而我需要的一些文件驻留在窗口文件服务器上。 我用谷歌搜索了几个选项,但没有一个提供解决方案/希望,除了这个:

enter code here
    filename indir 
    ftp 'Windows\Output\FO\20140813' 
    host=' xxxxxxx.xxxxxxxxxxxx.xxxxxxxxxxxx.xxx ' DIR
         user='xxxxxxxxx' pass=xxxxxxx;

    filename outdir 
    ftp '/AIX/Lev1/groups/xxx_xxx_xxxxxx/DPL' host=' xxxxxxx.xxxxxxx.xx DIR
    user='xxxxxxxxx' pass=xxxxxxx;

    data _null_;
       infile indir(DPL20140813.csv) truncover;
       input; 
       file outdir(DPL20140813.csv);
       put _infile_;
    run;

我遇到的问题是只读取和写入第一行的一部分,其中包含变量名称而不包含任何其他内容(大约65,000条记录)。

我错过了什么?

日志显示: 注意:从infile库INDIR中读取了总共1条记录。       最低记录长度为256。       最大记录长度为256。 注意:从infile INDIR(DPL20140813.csv)读取1条记录。       最低记录长度为256。 2 SAS系统2014年9月8日(星期一)08:50

  The maximum record length was 256.

注意:共有1条记录被写入文件库OUTDIR。       最低记录长度为256。       最大记录长度为256。 注意:1条记录被写入文件OUTDIR(DPL20140813.csv)。       最低记录长度为256。       最大记录长度为256。 注意:使用的DATA语句(总处理时间):       实时0.38秒       cpu时间0.18秒

2 个答案:

答案 0 :(得分:0)

我猜它是TERMSTR和LRECL问题的组合。

首先,将LRECL设置为32767(最大值),或任何适合您数据的特定值。 256是标准,所以它可能比256我想的更长。

其次,您需要TERMSTR = CRLF,因为AIX仅在LF上终止。我不确定这会不会引起你的问题,但这肯定是你至少应该做的事情。这假定Windows文件是在Windows中创建的(因此在其上有CRLF)。

答案 1 :(得分:0)

使用SAS在命令行中简单地调用FTP,而不是使用SAS在两个FTP位置之间读取和写出...

示例(未经测试,相应地替换适当的值):

%LET WORK = %SYSFUNC(pathname(work)) ;
%LET REMOTE = remote.windows.com ;
%LET USER = ... ;
%LET PASS = ... ;
%LET LOCALDIR = ... ;
%LET REMOTEDIR = ... ;
%LET FILE = ... ;

data _null_ ;
  file "&WORK.ftp.txt" ;
  put "user &USER &PASS" ;
  put "lcd &LOCALDIR" ;
  put "cd &REMOTEDIR" ;
  put "get &FILE" ;
  put "close" ;
  put "bye" ;
run ;

%SYSEXEC ftp -n &REMOTE <&WORK.ftp.txt ;