The code below copies all the SAS-programs (*.sas) files in a directory to another directory. This solution should be used if you don’t want to use an OS-command that copies the files. Using an OS-command is a lot easier and doesn’t require as much code. But of course depends on the OS your running on. This solution is OS independent.
%let SourcePath = C:\test\source;
%let DestinationPath = C:\test\destination;
/*
Reads the .sas files in &location.
*/
%macro GetFilenames(location);
filename _dir_ "%bquote(&location.)";
data filenames(keep=memname);
handle=dopen( '_dir_' );
if handle > 0 then do;
count=dnum(handle);
do i=1 to count;
memname=dread(handle,i);
output filenames;
end;
end;
rc=dclose(handle);
run;
filename _dir_ clear;
%mend;
%GetFilenames(&SourcePath.);
/* We only want SAS-files and not SAS-datasets. */
data filenames;
set filenames;
if index(memname, '.sas') eq 0 or index(memname, '.sas7bdat') eq 1 then delete;
run;
%let Delimitor = ยค;
proc sql noprint;
select memname into :Files separated by "&Delimitor"
from FileNames;
quit;
%put Files to copy: &Files;
%macro CopySASFiles;
%let NumberOfFiles = %sysfunc(countw(&Files., &Delimitor.));
%put Number of files: &NumberOfFiles.;
%do J=1 %to &NumberOfFiles.;
%let File = %scan(&Files., &J, &Delimitor.);
%put Copying SAS-program: &File.;
data _null_;
infile "&SourcePath.\&File." lrecl=32767;
file "&DestinationPath.\&File.";
input;
put _infile_;
run;
%end;
%mend;
%CopySASFiles;
what if we want to copy the files in all the sub directory?
Thanks