La macro %_delete est un utilitaire de bas niveau conçu pour les administrateurs et développeurs qui nécessitent un contrôle total sur le système de fichiers, au-delà des capacités de la PROC DELETE. Son intérêt principal réside dans sa capacité à cibler directement les fichiers sur le disque (extensions .sas7bdat, .sas7bndx, etc.) en résolvant leur chemin physique via la fonction pathname. En utilisant l'instruction X couplée à une logique de détection d'OS (%_unwind), elle permet de nettoyer radicalement des bibliothèques, incluant les fichiers d'index ou les catalogues souvent verrouillés.
Type : CREATION_INTERNE
Le script contient une section de validation (commentée) qui génère une table de test 'pwd._test_' avec un index pour vérifier le fonctionnement de la suppression.
| 1 | %macro _delete(arg1, cat=&arg1, DATA=&cat); |
| 2 | |
| 3 | %local i suffix file; |
| 4 | |
| 5 | %let suffix=%_suffix %_catext; |
| 6 | |
| 7 | %DO i=1 %to %_count(&suffix); |
| 8 | %let file=%_dir(%sysfunc(pathname(%_lib(&DATA))))%_data(&DATA).%scan(&suffix, &i, %str( )); |
| 9 | |
| 10 | %IF %_exist(&file) %THEN x "%_unwind(rm -f, del) &file";; |
| 11 | %END; |
| 12 | |
| 13 | %mend _delete; |
| 1 | /* |
| 2 | libname pwd '.'; |
| 3 | |
| 4 | data pwd._test_(index=(x)); |
| 5 | x=1; |
| 6 | output; |
| 7 | run; |
| 8 | */ |
| 1 | /* |
| 2 | %_delete(pwd._test_); |
| 3 | %_delete(pwd.imlstor); |
| 4 | |
| 5 | proc contents data=pwd._all_; |
| 6 | run; |
| 7 | */ |