使用SAS复制文本文件
是否有SAS程序/功能可用于将文本文件从一个位置复制到另一个位置 当然,这可以通过使用操作系统命令(%sysexec copy)来实现,但肯定有一种与操作系统无关的方法来实现吗 通过查看文档,我可以看出,proc copy(或proc cport)仅与SAS文件相关。似乎有答案使用SAS复制文本文件,sas,Sas,是否有SAS程序/功能可用于将文本文件从一个位置复制到另一个位置 当然,这可以通过使用操作系统命令(%sysexec copy)来实现,但肯定有一种与操作系统无关的方法来实现吗 通过查看文档,我可以看出,proc copy(或proc cport)仅与SAS文件相关。似乎有答案 /* these IN and OUT filerefs can point to anything */ filename in "c:\dataIn\input.xlsx"; filename out "c:\da
/* 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,最简单的方法是:
data _null_;
infile 'c:\input.txt';
file 'c:\output.txt';
input;
put _infile_;
run;
RawFocus提供的方法将以二进制形式将任何文件从输入复制到输出,每次复制一个字节。对于文本文件,这是不必要的,执行上述操作将一次复制一行文件。您可能需要稍微注意记录长度,我认为默认记录长度是256,因此您可能需要输入一个显式的
lrecl=32767
infle
语句中的选项或类似选项,如
infile 'c:\input.txt' lrecl=32767;
对于SAS 9.4和forward,请使用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());
如果fileref不使用recfm=n选项,则FCOPY会将其视为文本文件,因此会受到控制字符和文件结尾标记的影响。Raw,您现在应该能够将答案标记为正确-可能需要,否则这看起来像是未回答:)此外,我建议你将此添加到FAQ中,因为这是一个普遍需要的概念(IMO,对于“普通”的定义非常有限)。完成-谢谢Joe-我有点想先确保没有“更好”的答案,如果是这样的话,我会觉得有点厚脸皮地将我自己的答案标记为“正确”!另外-你说的“将此添加到FAQ”指的是什么?我指的是对FAQ工作原理的不准确理解:)即使对于文本文件,使用
recfm=n
的另一个好处是,如果文本文件有长行,它将被完整地复制,而不是LRECL中的内容。此方法的唯一问题是它假定了目标目标文件已存在。此宏将执行以下操作: