SAS代码根据条件检查复制文件?

时间:2014-07-16 06:44:24

标签: macros sas file-copying

您好我的要求是制药公司。

要求如下:

SAS作业每天运行,并应用了一些拒绝验证。

被拒绝的数据会转到特定的拒绝文件夹。现在我们已经被要求创建一个代码,其中代码“检查文件夹是否存在于名称为当前日期(今天日期)的位置,如果不存在,则应该创建它并从中放入被拒绝的数据文件REJECT FOLDER 到创建的日期文件夹(我有创建文件夹的代码。)

现在是捕获,其他开发人员应编写代码,通过该代码,今天日期应作为yyyymmdd格式附加在文件名的末尾。

我需要在最近的时间检查文件,并将其放在当前日期文件夹中。

E.g文件 c:\ sas \ xxxaaaa_20140716.dat ,该文件应复制到 c:\ reject \ 20140716 \ 文件夹。

我开发了一个代码来检查存在并创建一个名称为今天日期的文件夹。

请帮助我在两者之间编写代码以根据条件移动文件。 P .S。我是SAS编码的新手,所以我会非常感谢您准确的代码。谢谢。

代码:

%macro fcheck(dir=) ; 
options noxwait; %* no need to wait for command prompt action from user;

%local var fileref ; 
%let var = %sysfunc(filename(fileref,&dir)) ; 

%if %sysfunc(fexist(&fileref))  %then %* to check if the file xists;
   %put NOTE: The directory "&dir" exists ; %* here we can put a statement to move our reject file to the date folder;
%else 
   %do ; 
   %sysexec md   &dir ; %* create the directory as our current date;
   %put %sysfunc(sysmsg()) The directory has been created. ; %*this message may not be    required for us;
%end ; 

%let var=%sysfunc(filename(fileref)) ; 
%mend fcheck ; 
%let sascode=%sysfunc(date(), yymmddn8.);

%fcheck(dir=c:\dir) ;    %*  directory specification goes here ; 
%fcheck(dir=c:\dir\&sascode);%* checkin my directory path and name

1 个答案:

答案 0 :(得分:0)

在SAS中复制文件的几种方法:

xcommand(这将使用dos系统复制文件)

X "copy c:\temp\*.* C:\temp\CopyFiles\*.* > C:\temp\CopyFiles\reportcp.txt"; 

systask:

systask command "copy c:\temp\*.* C:\temp\CopyFiles\*.*" wait status=copyfl; 

请注意,systask与SAS异步运行,因此如果您需要等待SYSTASK命令的结果,则在继续之前需要使用WAITFOR或WAIT选项