2012-10-24 63 views
4

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

当然这可以使用OS命令(%sysexec副本)来实现,但是肯定必须有一个操作系统不可知的方式来做到这一点?

从我可以通过查看文件告诉,PROC副本(或PROC CPORT)只涉及到SAS文件..

回答

8

最简单的方法是这样的:

data _null_; 
    infile 'c:\input.txt'; 
    file 'c:\output.txt'; 
    input; 
    put _infile_; 
run; 

通过RawFocus提出将在同一时间从输入复制任何文件,二进制,一个字节输出的方法。对于文本文件,这不是必需的,并且执行上述操作将一次复制文件一行。您可能要稍微小心记录长度,我相信,默认记录长度是256,所以你可能需要把明确的

lrecl=32767 

选项或在infile声明相似,如

infile 'c:\input.txt' lrecl=32767; 
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; 

感谢克里斯

+0

原始的,你现在应该能够标记你的答案是正确的 - 可能想要的,否则这看起来像没有答案:)另外,我建议你将它添加到常见问题解答中,因为它是一个常用的概念(IMO,对'普通'的定义非常有限)。 – Joe

+0

完成 - 感谢乔 - 我有点想确保没有'更好'的答案,但如果真是这样的话,会觉得有点厚颜无耻地标记我自己的答案'正确'!另外 - 你提到'添加到常见问题'是什么? –

+0

我指的是对FAQ如何工作的不准确理解:) – Joe

2

对于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将把它们作为一个文本文件,从而通过控制字符和文件结束标志的影响。