La macro %dirfp2sas illustre parfaitement l'utilisation des pipes (canaux) pour étendre les capacités de SAS au-delà de la manipulation de tables. En exploitant l'instruction FILENAME PIPE, vous transformez la sortie d'une commande shell Windows (DIR ou FOR) en un flux de données lisible par une étape DATA. C'est une méthode d'une efficacité redoutable pour automatiser l'inventaire de répertoires volumineux ou pour orchestrer l'importation dynamique de fichiers dont les noms varient. L'astuce réside ici dans le nettoyage immédiat via lowcase et scan, permettant de normaliser les noms de fichiers pour des comparaisons ultérieures robustes.
Type : EXTERNE
Les données proviennent d'une commande système (Pipe) listant les fichiers du répertoire spécifié.
| 1 | %macro dirfp2sas(filepattern,dsout); |
| 2 | |
| 3 | %local savopts; |
| 4 | %let savopts=%sysfunc(getoption(NOTES)); |
| 5 | |
| 6 | %IF not %LENGTH(&dsout) %THEN %let dsout=_dirfp2sas; |
| 7 | |
| 8 | options nonotes; |
| 9 | |
| 10 | filename _dirfp pipe |
| 11 | "echo off & for %nrstr(%f) in (""&filepattern"") do echo %nrstr(%f)"; |
| 1 | DATA &dsout; |
| 2 | LENGTH filename $ 300 lcfname $ 200; |
| 3 | INFILE _dirfp; |
| 4 | INPUT; |
| 5 | filename=trim(_infile_); |
| 6 | lcfname=lowcase(scan(filename,-1,"\")); |
| 7 | RUN; |
| 1 | filename _dirfp CLEAR; |
| 2 | |
| 3 | options &savopts; |
| 4 | |
| 5 | %mend dirfp2sas; |