使用SAS复制文本文件

时间:2012-10-24 09:10:28

标签: sas

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

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

通过查看文档我可以看出,proc copy(或proc cport)只与SAS文件有关..

3 个答案:

答案 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会将它们视为文本文件,因此会受到控制字符和文件结束标记的影响。