Publicado el :
Macro CREATION_INTERNE

Creación de una función FCMP para escribir en un archivo

Este código también está disponible en: Deutsch Français
Attention : Este código requiere privilegios de administrador.
La macro `%mcf_string2file` genera una función FCMP. Esta función toma como parámetros la ruta completa de un archivo, la cadena de caracteres a escribir y un modo ('CREATE' para crear/sobrescribir o 'APPEND' para añadir al final). Utiliza las funciones SAS© de bajo nivel (`FILENAME`, `FOPEN`, `FPUT`, `FCLOSE`) para la manipulación de archivos. La macro también gestiona la opción del sistema `CMPLIB` verificando si la librería de funciones compiladas ya está declarada y añadiéndola si es necesario, para que la función esté inmediatamente disponible para los siguientes pasos DATA. El parámetro `wrap=YES` permite encapsular la definición de la función en un `PROC FCMP`.
Análisis de datos

Type : CREATION_INTERNE


El script no lee ningún dato fuente. Su finalidad es crear una función reutilizable que, a su vez, escribe datos textuales proporcionados como parámetro en un archivo del sistema de archivos. El origen de los datos procesados por la función es, por lo tanto, externo a este script pero interno a su propia llamada.

1 Bloque de código
PROC FCMP
Explicación :
Este bloque se ejecuta si `wrap=YES`. Utiliza `PROC FCMP` para definir y compilar una nueva función `mcf_string2file`. La función utiliza las funciones de archivo de SAS (`filename`, `fopen`, `fput`, `fwrite`, `fclose`) para escribir una cadena de caracteres en un archivo. Devuelve 0 en caso de éxito y -1 en caso de error (ej: imposible abrir el archivo).
¡Copiado!
1PROC FCMP outlib=&lib..&cat..&pkg;
2 
3function mcf_string2file(filepath $, string $, mode $);
4 IF mode='APPEND' THEN fmode='a';
5 ELSE fmode='o';
6 LENGTH fref $8;
7 rc=filename(fref,filepath);
8 IF (rc ne 0) THEN return( -1 );
9 fid = fopen(fref,fmode);
10 IF (fid = 0) THEN return( -1 );
11 rc=fput(fid, string);
12 rc=fwrite(fid);
13 rc=fclose(fid);
14 rc=filename(fref);
15 return(0);
16endsub;
17 
18 
19QUIT;
2 Bloque de código
OPTIONS
Explicación :
Este bloque de código macro verifica si la biblioteca de funciones (`&lib..&cat`) ya está presente en la opción del sistema `CMPLIB`. Si no la encuentra, la añade dinámicamente a través de `options insert=(CMPLIB=...)`. Esto garantiza que la función FCMP recién creada sea inmediatamente accesible en la sesión SAS.
¡Copiado!
1/* insert the CMPLIB if not already there */
2%let cmpval=%sysfunc(getoption(cmplib));
3%let found=0;
4%DO i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));
5 %let var=%scan(&cmpval,&i,%str( %(%)));
6 %IF &var=&lib..&cat %THEN %let found=1;
7%END;
8%IF &found=0 %THEN %DO;
9 options insert=(CMPLIB=(&lib..&cat));
10%END;
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.