使用SAS复制文本文件

All*_*owe 4 sas

是否有SAS过程/功能可用于将文本文件从一个位置复制到另一个位置?

当然这可以使用OS命令(%sysexec copy)来实现,但肯定必须有与操作系统无关的方法来执行此操作?

从我通过查看文档可以看出,proc copy(或proc cport)仅涉及SAS文件.

Tom*_*don 9

最简单的方法是这样的:

 data _null_;
    infile 'c:\input.txt';
    file 'c:\output.txt';
    input;
    put _infile_;
 run;
Run Code Online (Sandbox Code Playgroud)

RawFocus提供的方法将从输入到输出一次一个字节地复制任何二进制文件.对于文本文件,这不是必需的,并且执行上述操作将一次一行地复制文件.您可能需要对记录长度略微小心,我相信默认记录长度为256,因此您可能需要明确说明

 lrecl=32767
Run Code Online (Sandbox Code Playgroud)

infile声明中的选项或类似内容,如

infile 'c:\input.txt' lrecl=32767;
Run Code Online (Sandbox Code Playgroud)


All*_*owe 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;
Run Code Online (Sandbox Code Playgroud)

谢谢克里斯


Ric*_*ard 4

对于 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());
Run Code Online (Sandbox Code Playgroud)

如果文件引用不使用 recfm=n 选项,FCOPY 会将它们视为文本文件,从而受到控制字符和文件结尾标记的影响。