在网站上,我在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秒
答案 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 ;