Esta macro genera una ruta de archivo única combinando un prefijo, una cadena aleatoria basada en el hash (CRC32 del ID de trabajo, ID de proceso, tiempo, aleatorio) y una extensión opcional. Si no se proporciona ninguna ruta, utiliza la ruta física de la biblioteca WORK. El resultado se devuelve en una macro-variable de llamada. Incluye una gestión del estado de errores (SYSCC) para no contaminar el registro en caso de ejecución interna exitosa.
Análisis de datos
Type : CREATION_INTERNE
El procesamiento se realiza mediante un paso DATA _NULL_ que manipula cadenas de caracteres y funciones del sistema para generar el nombre del archivo.
1 Bloque de código
Macro Definition
Explicación : Inicialización de la macro: declaración de variables locales, llamada a una macro de depuración interna y guardado del estado actual de los errores del sistema (SYSCC, SYSMSG) para aislar la ejecución de la macro.
Explicación : Núcleo de la lógica: determina el directorio raíz (parámetro o WORK), genera una cadena aleatoria única (basada en el hash de información del sistema), añade la extensión y construye la ruta completa. El resultado se almacena en la macro-variable de retorno a través de CALL SYMPUT.
¡Copiado!
data _null_ ;
length root $ 4096
str $ 1024 ;
%* -- identify parent path ;
%* note: if not specified, using path of WORK library ;
root = symget('path');
if ( missing(root) ) then
root = pathname('WORK');
%* initililze with prefix ;
str = strip(symget('prefix'));
%* force first character to be A-Z-ish (thanks SAS) ;
if missing(str) then
str = byte( mod( floor(100*rand("uniform")), 26) + rank("A") - 1 ) ;
%* add random string ;
call cats( str, hashing( "crc32", catx( "-", symget('sysjobid'), symget('sysprocessid'), put( rand("uniform"), best32.), put( datetime(), datetime23.3) ) ) );
%* add file extension;
if ( not missing( symget('fileext') ) ) then
call catx( '.', str, symget('fileext') );
%* assign output value ;
call symput( symget('return'), translate( catx( "/", root, lowcase(str) ), "/", "\") );
run;
1
DATA _null_ ;
2
3
LENGTH root $ 4096
4
str $ 1024 ;
5
6
%* -- identify parent path ;
7
%* note: IF not specified, using path of WORK library ;
8
root = symget('path');
9
10
IF ( missing(root) ) THEN
11
root = pathname('WORK');
12
13
14
%* initililze with prefix ;
15
str = strip(symget('prefix'));
16
17
18
%* force first character to be A-Z-ish (thanks SAS) ;
Explicación : Restaura el estado de los códigos de error del sistema (SYSCC) tal como estaba antes de la ejecución de la macro, asegurando que la macro no borre los errores anteriores.
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.
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.