首页 文章

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

提问于
浏览
1

我在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系统08:50 2014年9月8日星期一

The maximum record length was 256.

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

2 回答

  • 0

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

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

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

  • 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 ;
    

相关问题