La macro no consume ni produce conjuntos de datos SAS. Manipula cadenas de caracteres (prefijos de librefs) e interactúa con el sistema SAS a través de funciones de metadatos para encontrar un nombre de libref disponible. No depende de ningún dato externo o interno específico (como SASHELP) para su funcionamiento principal.
1 Bloque de código
Macro
Explicación : Este bloque define la macro `%mf_getuniquelibref`. Inicializa una variable local `x`. Las primeras instrucciones `%if` validan el parámetro `prefix`: no debe exceder los 7 caracteres y debe ser un nombre SAS válido (`V7`). La variable `maxtries` se calcula a continuación para determinar el rango de búsqueda. Un bucle (`%do x = 0 %to &maxtries;`) itera para generar librefs potenciales (por ejemplo, `mc0`, `mc1`, ...). `%sysfunc(libref(&prefix&x))` verifica si el libref generado ya está asignado. Si `libref()` devuelve un valor no nulo, el libref no se utiliza y es devuelto por la macro. Si el bucle termina sin encontrar un libref único, se escriben mensajes de error en el registro SAS y la macro devuelve `0`.
¡Copiado!
%macro mf_getuniquelibref(prefix=mc,maxtries=1000);
%local x;
%if ( %length(&prefix) gt 7 ) %then %do;
%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;
0
%return;
%end;
%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;
%put %str(ERR)OR: Invalid prefix (&prefix);
0
%return;
%end;
/* Set maxtries equal to '10 to the power of [# unused characters] - 1' */
%let maxtries=%eval(10**(8-%length(&prefix))-1);
%do x = 0 %to &maxtries;
%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;
&prefix&x
%return;
%end;
%let x = %eval(&x + 1);
%end;
%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;
%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;
0
%mend mf_getuniquelibref;
/* Set maxtries equal to '10 to the power of [# unused characters] - 1' */
16
%let maxtries=%eval(10**(8-%LENGTH(&prefix))-1);
17
18
%DO x = 0 %to &maxtries;
19
%IF %sysfunc(libref(&prefix&x)) ne 0 %THEN %DO;
20
&prefix&x
21
%return;
22
%END;
23
%let x = %eval(&x + 1);
24
%END;
25
26
%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;
27
%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;
28
0
29
%mend mf_getuniquelibref;
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 : Mencionado en el bloque de ayuda: Allan Bowe. Un copyright más detallado encontrado en un archivo relacionado (`_version.sas`) indica: Copyright (c) 2001-2006 Rodney Sparapani. Este archivo es software libre; puede redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General GNU tal como fue publicada por la Free Software Foundation.
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.