1
0
mirror of https://github.com/sasjs/core.git synced 2025-12-15 16:14:36 +00:00

chore: all.sas update

This commit is contained in:
Allan Bowe
2021-11-26 16:20:33 +00:00
parent 9e84e47563
commit 3b395b3ae5

81
all.sas
View File

@@ -3066,6 +3066,74 @@ data &outds;
run;
%mend mp_deleteconstraints;/**
@file
@brief A macro to delete a directory
@details Will delete all folder content (including subfolder content) and
finally, the folder itself.
Usage:
%let rootdir=%sysfunc(pathname(work))/demo;
%mf_mkdir(&rootdir)
%mf_mkdir(&rootdir/subdir)
%mf_mkdir(&rootdir/subdir/subsubdir)
data "&rootdir/subdir/example.sas7bdat";
run;
%mp_deletefolder(&rootdir)
@param path Unquoted path to the folder to delete.
<h4> SAS Macros </h4>
@li mf_getuniquename.sas
@li mf_isdir.sas
@li mp_dirlist.sas
<h4> Related Macros </h4>
@li mp_deletefolder.test.sas
**/
%macro mp_deletefolder(folder);
/* proceed if valid directory */
%if %mf_isdir(&folder)=1 %then %do;
/* prep temp table */
%local tempds;
%let tempds=%mf_getuniquename();
/* recursive directory listing */
%mp_dirlist(path=&folder,outds=work.&tempds, maxdepth=MAX)
/* sort descending level so can delete folder contents before folders */
proc sort data=work.&tempds;
by descending level;
run;
/* ensure top level folder is removed at the end */
proc sql;
insert into work.&tempds set filepath="&folder";
/* delete everything */
data _null_;
set work.&tempds end=last;
length fref $8;
rc=filename(fref,filepath);
rc=fdelete(fref);
if rc then do;
msg=sysmsg();
put "&sysmacroname:" / rc= / msg= / filepath=;
end;
rc=filename(fref);
run;
/* tidy up */
proc sql;
drop table work.&tempds;
%end;
%else %put &sysmacroname: &folder: is not a valid / accessible folder. ;
%mend mp_deletefolder;/**
@file
@brief Returns all files and subdirectories within a specified parent
@details When used with getattrs=NO, is not OS specific (uses dopen / dread).
@@ -3118,6 +3186,9 @@ run;
<h4> SAS Macros </h4>
@li mp_dropmembers.sas
<h4> Related Macros </h4>
@li mp_dirlist.test.sas
@version 9.2
@author Allan Bowe
**/
@@ -3138,7 +3209,7 @@ data;run;
/* drop main (top) table if it exists */
%if &level=0 %then %do;
%mp_dropmembers(&outds, libref=WORK)
%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)
%end;
data &out_ds(compress=no
@@ -3253,12 +3324,12 @@ run;
run;
%end;
/* update main table */
proc append base=&outds data=&out_ds;
data &out_ds;
set &out_ds(where=(filepath ne ''));
run;
data &outds;
set &outds(where=(filepath ne ''));
/* update main table */
proc append base=&outds data=&out_ds;
run;
/* recursive call */