La macro no procesa conjuntos de datos SAS. Opera directamente en el sistema de archivos utilizando una ruta de directorio proporcionada como parámetro.
1 Bloque de código
Macro %mf_mkdir
Explicación : Este bloque contiene la definición completa de la macro `%mf_mkdir`. La macro toma una ruta de directorio (`dir`) como parámetro.
Comienza con verificaciones de entrada: detecta e ignora las rutas que son letras de unidad (ej: 'C:') y elimina las barras oblicuas finales si están presentes, excepto para el directorio raíz. Esto asegura una manipulación consistente de las rutas.
El núcleo de la lógica es un bloque condicional que se ejecuta si el directorio objetivo no existe (verificado por `%sysfunc(fileexist)`). Dentro de este bloque:
1. La ruta se descompone para identificar el último componente (`child`) y la ruta de su padre (`parent`).
2. La macro se llama a sí misma de forma recursiva (`%mf_mkdir(&parent)`) para garantizar que existan todos los directorios padre antes de intentar crear el directorio actual.
3. El directorio `child` se crea en el `parent` utilizando la función `%sysfunc(dcreate(&child, &parent))`. Esta función es compatible con los sistemas de archivos Windows y Unix.
4. Se incluye una gestión de errores rudimentaria: si `dcreate` falla (devuelve una cadena vacía), se muestra un mensaje de error (`%put ERROR:`) y la ejecución de la sesión SAS se detiene (`%abort cancel`). En caso de éxito, se muestra un mensaje de confirmación.
La macro está diseñada para ser idempotente: si el directorio ya existe, no hace nada y finaliza silenciosamente.
¡Copiado!
%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;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Copyright (c) 2001-2006 Rodney Sparapani; Copyright 2010-2023 HMS Analytical Software GmbH, http://www.analytical-software.de (información extraída del archivo _version.sas referenciado en la ayuda de la macro).
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.