Los datos provienen de una consulta al Servidor de Metadatos SAS (Metadata Server) a través de PROC METADATA.
1 Bloque de código
DATA STEP
Explicación : Cálculo y almacenamiento en una macrovariable de los indicadores (flags) necesarios para la solicitud de metadatos (OMI_SUCCINCT, OMI_GET_METADATA, OMI_ALL_SIMPLE).
¡Copiado!
data _null_;
flags=2048+256+8;
call symputx('flags',flags,'l');
run;
1
DATA _null_;
2
flags=2048+256+8;
3
call symputx('flags',flags,'l');
4
RUN;
2 Bloque de código
PROC METADATA
Explicación : Ejecución de la consulta al servidor de metadatos para recuperar todos los objetos 'SASLibrary'. El resultado XML se almacena en la referencia de archivo temporal 'response'.
¡Copiado!
filename response temp;
/* get list of libraries */
proc metadata in=
'<GetMetadataObjects>
<Reposid>$METAREPOSITORY</Reposid>
<Type>SASLibrary</Type>
<Objects/>
<NS>SAS</NS>
<Flags>&flags</Flags>
<Options/>
</GetMetadataObjects>'
out=response;
run;
1
filename response temp;
2
/* get list of libraries */
3
PROC METADATA in=
4
'<GetMetadataObjects>
5
<Reposid>$METAREPOSITORY</Reposid>
6
<Type>SASLibrary</Type>
7
<Objects/>
8
<NS>SAS</NS>
9
<Flags>&flags</Flags>
10
<Options/>
11
</GetMetadataObjects>'
12
out=response;
13
RUN;
3 Bloque de código
DATA STEP
Explicación : Paso de depuración que escribe el contenido bruto de la respuesta XML en el registro SAS.
¡Copiado!
/* write the response to the log for debugging */
data _null_;
infile response lrecl=32767;
input;
put _infile_;
run;
1
/* write the response to the log for debugging */
2
DATA _null_;
3
INFILE response lrecl=32767;
4
INPUT;
5
put _infile_;
6
RUN;
4 Bloque de código
DATA STEP
Explicación : Generación dinámica de un archivo SXLEMAP (Mapa XML) para definir cómo analizar el archivo XML devuelto y extraer los atributos deseados (Id, Name, Libref, Engine) como columnas.
¡Copiado!
filename sxlemap temp;
data _null_;
file sxlemap;
put '<SXLEMAP version="1.2" name="SASLibrary">';
put '<TABLE name="SASLibrary">';
put '<TABLE-PATH syntax="XPath">//Objects/SASLibrary</TABLE-PATH>';
put '<COLUMN name="LibraryId">><LENGTH>17</LENGTH>';
put '<PATH syntax="XPath">//Objects/SASLibrary/ @Id</PATH></COLUMN>';
put '<COLUMN name="LibraryName"><LENGTH>256</LENGTH>>';
put '<PATH syntax="XPath">//Objects/SASLibrary/ @Name</PATH></COLUMN>';
put '<COLUMN name="LibraryRef"><LENGTH>8</LENGTH>';
put '<PATH syntax="XPath">//Objects/SASLibrary/ @Libref</PATH></COLUMN>';
put '<COLUMN name="Engine">><LENGTH>12</LENGTH>';
put '<PATH syntax="XPath">//Objects/SASLibrary/ @Engine</PATH></COLUMN>';
put '</TABLE></SXLEMAP>';
run;
1
filename sxlemap temp;
2
DATA _null_;
3
file sxlemap;
4
put '<SXLEMAP version="1.2" name="SASLibrary">';
5
put '<TABLE name="SASLibrary">';
6
put '<TABLE-PATH syntax="XPath">//Objects/SASLibrary</TABLE-PATH>';
7
put '<COLUMN name="LibraryId">><LENGTH>17</LENGTH>';
8
put '<PATH syntax="XPath">//Objects/SASLibrary/ @Id</PATH></COLUMN>';
9
put '<COLUMN name="LibraryName"><LENGTH>256</LENGTH>>';
10
put '<PATH syntax="XPath">//Objects/SASLibrary/ @Name</PATH></COLUMN>';
11
put '<COLUMN name="LibraryRef"><LENGTH>8</LENGTH>';
12
put '<PATH syntax="XPath">//Objects/SASLibrary/ @Libref</PATH></COLUMN>';
13
put '<COLUMN name="Engine">><LENGTH>12</LENGTH>';
14
put '<PATH syntax="XPath">//Objects/SASLibrary/ @Engine</PATH></COLUMN>';
15
put '</TABLE></SXLEMAP>';
16
RUN;
5 Bloque de código
PROC SORT Data
Explicación : Asignación del motor XML utilizando el archivo de respuesta y el mapa generado, seguida de la creación de la tabla de salida ordenada por nombre de biblioteca.
¡Copiado!
libname _XML_ xml xmlfileref=response xmlmap=sxlemap;
/* sort the response by library name */
proc sort data=_XML_.saslibrary out=&outds;
by libraryname;
run;
1
LIBNAME _XML_ xml xmlfileref=response xmlmap=sxlemap;
2
3
/* sort the response by library name */
4
PROC SORTDATA=_XML_.saslibrary out=&outds;
5
BY libraryname;
6
RUN;
6 Bloque de código
DATA STEP
Explicación : Limpieza del entorno liberando las referencias de archivos (filename) y de biblioteca (libname).
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.