2010-03-03 98 views
9

Tengo muchos archivos en formato SAS y me gustaría poder leerlos en programas fuera de SAS. No tengo nada excepto el sistema base SAS instalado. Podría convertirlos manualmente, pero me gustaría una forma de hacerlo automáticamente.¿Cómo puedo leer un conjunto de datos SAS?

+0

qué programas/formatos le gustaría leer en? ¿Con qué lenguaje de programación estarías trabajando? –

+0

Estoy usando Python. No especifiqué un programa o formato porque no quería limitar las respuestas; si hay una forma de leer los datos a través de una DLL o una API, estoy seguro de que puedo averiguar cómo llamarlo. Pero no puedo encontrar ninguna forma de hacerlo, sin licenciar programas adicionales de SAS. –

+0

¿Escribir una macro SAS para convertir cada cuenta como una solución automática? –

Respuesta

6

Necesitará tener una sesión de SAS en ejecución para actuar como un servidor de datos. A continuación, puede acceder a los datos SAS utilizando ODBC, consulte el SAS ODBC drivers guide.

Para tener el servidor local que ejecuta SAS ODBC, es necesario:

  1. Definir la configuración del servidor SAS ODBC al descrito en la guía de conductores SAS ODBC. En el ejemplo que sigue, me conectaré a un servidor que está configurado con el nombre "loclodbc".
  2. Añadir una entrada en el archivo de servicios, (C: \ WINDOWS \ system32 \ drivers \ etc \ services), así:

    • loclodbc 9191/tcp

    ... conjunto el número de puerto (aquí: 9191) para que se ajuste a su configuración local. El nombre del servicio "loclodbc" debe coincidir con el nombre del servidor tal como se define en la configuración de ODBC. Tenga en cuenta que el término "Servidor" no tiene nada que ver con el nombre de host físico de su PC.

Su servidor SAS ODBC está ahora listo para ejecutarse, pero no tiene recursos de datos asignados disponibles. Normalmente, debe configurar esto en la pestaña "Bibliotecas" en el proceso de configuración ODBC de SAS, pero dado que desea apuntar a las fuentes de datos "sobre la marcha", omitimos esto.

Desde su aplicación cliente, ahora puede conectarse al servidor ODBC SAS, señalar los recursos de datos a los que desea acceder y buscar los datos.

La manera en que SAS señala los recursos de datos es a través del concepto de "LIBNAME". Un nombre de lib es un puntero lógico a una colección de datos.

Así

LIBNAME sasadhoc 'C:\sasdatafolder'; 

asigna la carpeta "C: \ sasdatafolder" el mango lógica "sasiodat".

Si desde dentro SAS quiere tener acceso a los datos que residen en el archivo de la tabla de datos SAS "C: \ sasdatafolder \ test.sas7bdat", que haría algo como esto:

LIBNAME sasadhoc 'C:\sasdatafolder'; 
PROC SQL; 
    CREATE TABLE WORK.test as 
    SELECT * 
    FROM sasadhoc.test 
    ; 
QUIT; 

Así que lo que necesitamos hacer es decirle a nuestro servidor SAS ODBC que asigne un nombre de libra a C: \ sasdatafolder, desde nuestra aplicación cliente. Podemos hacer esto enviando esta solicitud de asignación de recursos al inicio, utilizando el parámetro DBCONINIT.

He hecho algunos ejemplos de código para hacer esto. Mi código de muestra también está escrito en el idioma BASE SAS. Dado que obviamente hay formas más inteligentes de acceder a los datos de SAS que SAS conectándose a SAS a través de ODBC, este código solo sirve como ejemplo.

Usted debe ser capaz de tomar los bits útiles y crear su propia solución en el entorno de programación que está utilizando ...

SAS ODBC código de ejemplo de conexión:

PROC SQL; 
    CONNECT TO ODBC(DSN=loclodbc DBCONINIT="libname sasadhoc 'c:\sasdatafolder'"); 
    CREATE TABLE temp_sas AS 
    SELECT * FROM CONNECTION TO ODBC(SELECT * FROM sasadhoc.test); 
QUIT; 

La magia sucede en la parte "CONNECT TO ODBC ..." del código, asignando un nombre de lib a la carpeta donde residen los datos necesarios.

+0

En realidad, no necesita una sesión SAS en ejecución; el controlador ODBC ejecutará uno automáticamente. Sin embargo, no existe una forma fácil de crear programáticamente la configuración ODBC, por lo que debe configurarse manualmente. Lo cual es un problema, ya que no se puede cargar un conjunto de datos arbitrario. –

+0

Por arbitrario, probablemente quiere decir "ubicado en cualquier lugar, con cualquier nombre" ...? ¿O se da como un parámetro? –

+0

Situado en cualquier lugar, con cualquier nombre. –

2

Creo que es posible que pueda utilizar ADO, Consulte el SAS support site para obtener más información.

responsabilidad:

  1. no he mirado esto durante un tiempo
  2. No estoy 100% seguro de que esto no requiere licencias adicionales
  3. no estoy seguro de si puede hacerlo utilizando Python
2

que nunca he probado http://www.oview.co.uk/dsread/, pero podría ser lo que estás buscando: "una sencilla utilidad de línea de comandos para trabajar con conjuntos de datos en el formato de archivo SAS7BDAT." Pero tenga en cuenta "Este software debe considerarse experimental y no se garantiza que sea preciso. Usted lo utiliza bajo su propio riesgo. Solo funcionará en archivos SAS7BDAT de formato Windows sin comprimir por ahora."

3

Puede hacer un programa de conversión de SAS a CSV.

Guarde lo siguiente en sas_to_csv.sas:

proc export data=&sysparm 
    outfile=stdout dbms=csv; 
run; 

Entonces, suponiendo que desea acceder libname.dataset, llamar a este programa de la siguiente manera:

sas sas_to_csv -noterminal -sysparm "libname.dataset" 

Los datos SAS se convierte en CSV que se pueden verter en Python. En Python, sería bastante fácil generar los parámetros "libname.dataset" programáticamente.

Cuestiones relacionadas