La macro ne traite pas de jeux de données SAS. Elle opère directement sur le système de fichiers en utilisant un chemin de répertoire fourni en paramètre.
1 Bloc de code
Macro %mf_mkdir
Explication : Ce bloc contient l'intégralité de la définition de la macro `%mf_mkdir`. La macro prend un chemin de répertoire (`dir`) en paramètre.
Elle commence par des vérifications d'entrée : elle détecte et ignore les chemins qui sont des lettres de lecteur (ex: 'C:') et retire les barres obliques de fin si présentes, sauf pour le répertoire racine. Ceci assure une manipulation cohérente des chemins.
Le cœur de la logique est un bloc conditionnel qui s'exécute si le répertoire cible n'existe pas (vérifié par `%sysfunc(fileexist)`). À l'intérieur de ce bloc :
1. Le chemin est décomposé pour identifier le dernier composant (`child`) et le chemin de son parent (`parent`).
2. La macro s'appelle elle-même de manière récursive (`%mf_mkdir(&parent)`) pour garantir que tous les répertoires parents existent avant de tenter de créer le répertoire actuel.
3. Le répertoire `child` est créé dans le `parent` en utilisant la fonction `%sysfunc(dcreate(&child, &parent))`. Cette fonction est compatible avec les systèmes de fichiers Windows et Unix.
4. Une gestion d'erreur rudimentaire est incluse : si `dcreate` échoue (retourne une chaîne vide), un message d'erreur est affiché (`%put ERROR:`) et l'exécution de la session SAS est arrêtée (`%abort cancel`). En cas de succès, un message de confirmation est affiché.
La macro est conçue pour être idempotente : si le répertoire existe déjà, elle ne fait rien et se termine silencieusement.
Copié !
%macro mf_mkdir(dir
)/*/STORE SOURCE*/;
%local lastchar child parent;
%let lastchar = %substr(&dir, %length(&dir));
%if (%bquote(&lastchar) eq %str(:)) %then %do;
/* Cannot create drive mappings */
%return;
%end;
%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\\_)) %then %do;
/* last char is a slash */
%if (%length(&dir) eq 1) %then %do;
/* one single slash - root location is assumed to exist */
%return;
%end;
%else %do;
/* strip last slash */
%let dir = %substr(&dir, 1, %length(&dir)-1);
%end;
%end;
%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;
/* directory does not exist so prepare to create */
/* first get the childmost directory */
%let child = %scan(&dir, -1, %str(/\\:));
/*
If child name = path name then there are no parents to create. Else
they must be recursively scanned.
*/
%if (%length(&dir) gt %length(&child)) %then %do;
%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));
%mf_mkdir(&parent)
%end;
/*
Now create the directory. Complain loudly of any errs.
*/
%let dname = %sysfunc(dcreate(&child, &parent));
%if (%bquote(&dname) eq ) %then %do;
%put %str(ERR)OR: could not create &parent + &child;
%abort cancel;
%end;
%else %do;
%put Directory created: &dir;
%end;
%end;
/* exit quietly if directory did exist.*/
%mend mf_mkdir;
1
%macro mf_mkdir(dir
2
)/*/STORE SOURCE*/;
3
4
%local lastchar child parent;
5
6
%let lastchar = %substr(&dir, %LENGTH(&dir));
7
%IF (%bquote(&lastchar) eq %str(:)) %THEN %DO;
8
/* Cannot create drive mappings */
9
%return;
10
%END;
11
12
%IF (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\\_)) %THEN %DO;
13
/* last char is a slash */
14
%IF (%LENGTH(&dir) eq 1) %THEN %DO;
15
/* one single slash - root location is assumed to exist */
Now create the directory. Complain loudly of any errs.
41
*/
42
43
%let dname = %sysfunc(dcreate(&child, &parent));
44
%IF (%bquote(&dname) eq ) %THEN %DO;
45
%put %str(ERR)OR: could not create &parent + &child;
46
%abort cancel;
47
%END;
48
%ELSE %DO;
49
%put Directory created: &dir;
50
%END;
51
%END;
52
/* exit quietly if directory did exist.*/
53
%mend mf_mkdir;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Copyright (c) 2001-2006 Rodney Sparapani; Copyright 2010-2023 HMS Analytical Software GmbH, http://www.analytical-software.de (informations extraites du fichier _version.sas référencé dans l'aide de la macro).
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.