Almacenamiento de datos SAS (incluida la estructura de la tabla) en un único archivo plano

StackOverflow https://stackoverflow.com/questions/119929

  •  02-07-2019
  •  | 
  •  

Pregunta

Necesito convertir tablas de datos SAS en archivos planos (o "archivos ASCII", como se los llamaba una vez, a diferencia de archivos binarios).Y sólo un archivo plano para cada tabla SAS original.El desafío es que quiero que el archivo plano contenga también información estructural de la tabla SAS original, específicamente:

  • Nombre de variable/columna
  • Etiqueta de variable/columna
  • Tipo de variable/columna
  • Longitud variable/columna
  • Formato de variable/columna
  • Información de variable/columna

Información adicional:

  • Solo necesitaré convertir datos pequeños (<100 obs).
  • El rendimiento no es un problema (dentro de límites razonables).
  • El archivo plano debería formar una base para recrear la tabla SAS original; no necesito poder usar el archivo directamente como una tabla en los pasos DATA o PROC.

Las tablas SAS estándar, los archivos de transporte, los archivos XPORT, etc. son todos archivos de formato binario, y el formato de tabla XML estándar en archivos SAS y CSV no conserva la estructura de la tabla.Obviamente estas opciones no ayudan.

¿Cuál es mi mejor opción?

¿Fue útil?

Solución

No conozco ninguna solución fácil.

Posiblemente:

  1. Utilice PROC EXPORT para generar un archivo CSV con los datos que contiene.
  2. Utilice PROC DATASETS con ODS para producir un conjunto de datos con los nombres, tipos, etc.
  3. Genere otro archivo CSV para este conjunto de datos.

Ahora tiene la descripción ASCII de la tabla (repartida en dos archivos CSV).Revertir el proceso sería más complicado.Básicamente, tendrías que leer el conjunto de datos de descripción, luego usar CALL SYMPUT en un bucle para crear un montón de variables macro con la información que contienen, luego usar tus variables macro para crear un PROC IMPORT para el archivo CSV...

Otros consejos

  1. Cree el código para exportar la tabla a texto (esto es sencillo, simplemente búsquelo en Google o consulte 'The Little SAS Book' si tiene una copia).

  2. Luego agregue la información 'meta' de sashelp.vcolumn, que es donde sas almacena información (metadatos) sobre los conjuntos de datos sas.Es una tabla sas en sí misma, por lo que podría realizar una operación de unión proc sql para unirla con las columnas reales que describe esta tabla (aunque necesitará realizar una operación de tipo transposición porque los metadatos sobre las columnas están en filas, no en columnas). ).

No estás siendo completamente específico acerca de cómo quieres ver los metadatos en el archivo de texto, así que eso es lo más lejos que puedo llegar.

La sintaxis de descripción de proc sql puede ser útil para obtener la parte de metadatos, incluidas longitudes, tipos, formatos, índices, etc.

Código:

proc sql;
describe table sashelp.class;
quit;

Registro:

NOTE: SQL table SASHELP.CLASS was created like:

create table SASHELP.CLASS( bufsize=4096 )
  (
   Name char(8),
   Sex char(1),
   Age num,
   Height num,
   Weight num
  );

Con SAS 9.2, puede crear un archivo XML a partir de un conjunto de datos y el XML contiene metadatos de variables/columnas, como formato, etiqueta, etc.Consulte la sección del motor LIBNAME XML de SAS 9.2:Guía del usuario titulada "Uso del motor XML para transportar conjuntos de datos SAS entre entornos operativos".Un enlace a él está aquí:

http://support.sas.com/documentation/cdl/en/engxml/61740/HTML/default/a002594382.htm

Aquí hay una sección de código del manual que muestra el uso del motor libname XML92 y PROC COPY para crear el XML:

libname myfiles 'SAS-library';
libname trans xml92 'XML-document' xmltype=export;
proc copy in=myfiles out=trans;
   select class;
run;

En SAS 9.1.3, es posible que deba crear un conjunto de etiquetas personalizado para realizar la misma operación.El soporte técnico de SAS (support@sas.com) puede ofrecerle ayuda.

Por cierto, no has dicho por qué necesitas hacer esto.En este caso, no hay una buena razón (puede haber una razón convincente, como alguien con poder que diga 'hazlo o ser despedido', pero no hay bien razón).

Renunciaría a la idea de fusionar los metadatos y los datos de cada archivo, a menos que haya alguna razón increíblemente sólida para hacerlo.Continúe exportando los metadatos del conjunto de datos A a un archivo llamado metadata_A;esto dará como resultado archivos emparejados.Cualquiera que desee utilizar esos archivos en un programa de base de datos o programa estadístico tendría un archivo de metadatos claramente etiquetado con el que trabajar.

Si solo va a utilizar los datos en SAS, puede usar PROC COPY para crear archivos de transporte:

http://www.usc.edu/isd/doc/statistics/sas/sastransport/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top