La macro opera sobre archivos externos cuyas rutas o filerefs se proporcionan como parámetros (`inloc`, `outloc`, `inref`, `outref`). No genera datos internos para su propio procesamiento, sino que manipula archivos binarios existentes o a crear.
1 Bloque de código
MACRO DEFINITION
Explicación : Definición de la macro `%mp_binarycopy` con sus parámetros de entrada, incluyendo las rutas de archivo (inloc, outloc), las referencias de archivo (inref, outref), el modo de operación (CREATE o APPEND) y una condición de ejecución (iftrue). La macro incluye una variable local 'mod' y una condición de salida temprana.
¡Copiado!
%macro mp_binarycopy(
inloc= /* full path and filename of the object to be copied */
,outloc= /* full path and filename of object to be created */
,inref=____in /* override default to use own filerefs */
,outref=____out /* override default to use own filerefs */
,mode=CREATE
,iftrue=%str(1=1)
)/*/STORE SOURCE*/;
%local mod;
%if not(%eval(%unquote(&iftrue))) %then %return;
1
%macro mp_binarycopy(
2
inloc= /* full path and filename of the object to be copied */
3
,outloc= /* full path and filename of object to be created */
4
,inref=____in /* override default to use own filerefs */
5
,outref=____out /* override default to use own filerefs */
6
,mode=CREATE
7
,iftrue=%str(1=1)
8
)/*/STORE SOURCE*/;
9
%local mod;
10
11
%IF not(%eval(%unquote(&iftrue))) %THEN %return;
2 Bloque de código
Pré-traitement (Filerefs)
Explicación : Esta sección configura los filerefs de entrada y salida. Si los parámetros `inref` o `outref` no han sido sobrescritos, la macro crea filerefs temporales (`____in`, `____out`) que apuntan a las rutas especificadas por `inloc` y `outloc`. La opción `lrecl=1048576` define la longitud de registro lógico, y `&mod` se añade al fileref de salida si el modo es 'APPEND'.
¡Copiado!
%if &mode=APPEND %then %let mod=mod;
/* these IN and OUT filerefs can point to anything */
%if &inref = ____in %then %do;
filename &inref &inloc lrecl=1048576 ;
%end;
%if &outref=____out %then %do;
filename &outref &outloc lrecl=1048576 &mod;
%end;
1
%IF &mode=APPEND %THEN %let mod=mod;
2
3
/* these IN and OUT filerefs can point to anything */
4
%IF &inref = ____in %THEN %DO;
5
filename &inref &inloc lrecl=1048576 ;
6
%END;
7
%IF &outref=____out %THEN %DO;
8
filename &outref &outloc lrecl=1048576 &mod;
9
%END;
3 Bloque de código
DATA STEP
Explicación : Bloque central de la macro, utilizando un paso `DATA _null_`. Lee el archivo de entrada (`infile`) byte a byte (`lrecl=1 recfm=n`) y escribe cada byte directamente en el archivo de salida (`file`). `sourcechar $char1.` lee un carácter, `format sourcechar hex2.` lo formatea en hexadecimal, y `put sourcechar char1.` lo escribe como un carácter único, asegurando una copia binaria.
¡Copiado!
/* copy the file byte-for-byte */
data _null_;
infile &inref lrecl=1 recfm=n;
file &outref &mod recfm=n;
input sourcechar $char1. @code_sas_json/hsdua2304@gmail.com_SAS_Assignment_2.json;
format sourcechar hex2.;
put sourcechar char1. @code_sas_json/hsdua2304@gmail.com_SAS_Assignment_2.json;
run;
put sourcechar char1. @code_sas_json/hsdua2304@gmail.com_SAS_Assignment_2.json;
8
RUN;
4 Bloque de código
Post-traitement (Libération Filerefs)
Explicación : Después de la operación de copia, esta sección se asegura de que los filerefs temporales (`____in`, `____out`) creados por la macro sean liberados (`filename ... clear;`), evitando así conflictos de nombres y el consumo de recursos innecesarios.
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
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.