是否有SAS程序/功能可用于将文本文件从一个位置复制到另一个位置?
当然这可以使用OS命令(%sysexec copy)来实现,但肯定必须有与操作系统无关的方法来执行此操作吗?
通过查看文档我可以看出,proc copy(或proc cport)只与SAS文件有关..
答案 0 :(得分:8)
最简单的方法是:
data _null_;
infile 'c:\input.txt';
file 'c:\output.txt';
input;
put _infile_;
run;
RawFocus提供的方法将从输入到输出一次一个字节地复制任何二进制文件。对于文本文件,这不是必需的,并且执行上述操作将一次一行地复制文件。您可能需要对记录长度稍微小心,我相信默认记录长度为256,因此您可能需要明确
lrecl=32767
{/ 1}}语句中的选项或类似内容,如
infile
答案 1 :(得分:5)
似乎Chris Hemedinger有答案!
/* these IN and OUT filerefs can point to anything */
filename in "c:\dataIn\input.xlsx";
filename out "c:\dataOut\output.xlsx";
/* copy the file byte-for-byte */
data _null_;
length filein 8 fileid 8;
filein = fopen('in','I',1,'B');
fileid = fopen('out','O',1,'B');
rec = '20'x;
do while(fread(filein)=0);
rc = fget(filein,rec,1);
rc = fput(fileid, rec);
rc =fwrite(fileid);
end;
rc = fclose(filein);
rc = fclose(fileid);
run;
filename in clear;
filename out clear;
谢谢Chris
答案 2 :(得分:3)
对于SAS 9.4并转发使用FCOPY功能。使用recfm = n(n表示无或二进制)来执行真正的副本。
filename src "path-to-src" recfm=n;
filename dst "path-to-dst" recfm=n;
%let rc = %sysfunc(FCOPY(src,dst));
%put %sysfunc(SYSMSG());
如果filerefs不使用recfm = n选项,FCOPY会将它们视为文本文件,因此会受到控制字符和文件结束标记的影响。