2013-10-28 13 views
7

Devo scaricare i dati dai set di dati SAS. Ho trovato un modulo Python chiamato sas7bdat.py che dice che può leggere i dataset SAS .sas7bdat, e penso che sarebbe più semplice e più semplice fare il progetto in Python piuttosto che SAS a causa delle altre funzionalità richieste. Tuttavia, l'aiuto (sas7bdat) in Python interattivo non è molto utile e l'unico esempio sono stato in grado di trovare il dump di un insieme di dati è la seguente:Utilizzo del modulo Python sas7bdat

import sas7bdat 
from sas7bdat import * 
# following line is sas dataset to convert 
foo = SAS7BDAT('/support/sas/locked_data.sas7bdat') 
#following line is txt file to create 
foo.convertFile('/support/textfiles/locked_data.txt','\t') 

Questo non fa quello che voglio perché a) usa i nomi delle variabili SAS come intestazioni di colonna e ho bisogno di usare le etichette delle variabili, e b) usa "nan" per indicare valori numerici mancanti dove preferisco lasciare il valore vuoto.

Qualcuno può indicarmi qualche documentazione utile sui metodi inclusi in sas7bdat.py? Ho cercato su Google ogni permutazione di parole chiave a cui avrei potuto pensare, senza fortuna. In caso contrario, qualcuno può darmi un esempio o due di utilizzo di readColumnAttributes(), readColumnLabels() e/o readColumnNames()?

Grazie, tutto.

risposta

2

Personalmente ritengo che l'approccio migliore sarebbe quello di esportare i dati utilizzando SAS, quindi elaborare il file esterno come necessario utilizzando Python.

In SAS, si può fare questo ...

libname datalib "/support/sas"; 
filename sasdump "/support/textfiles/locked_data.txt"; 

proc export 
    data = datalib.locked_data 
    outfile = sasdump 
    dbms = tab 
    label 
    replace; 
run; 

L'aspetto negativo di questo è che, mentre le etichette delle colonne sono utilizzati, piuttosto che i nomi delle variabili, le etichette sono racchiuse tra virgolette. Durante l'elaborazione in Python, potrebbe essere necessario rimuoverli a livello di codice se causano un problema. Spero che questo aiuti anche se non usa Python come volevi.

+0

Non tutti hanno accesso a SAS - è sufficiente sborsare diverse migliaia di dollari per utente per questa soluzione. Ahia! Se si stanno elaborando i dati in Python comunque, l'uso di una libreria python per caricare i dati minimizza anche le dipendenze del software e rende possibile automatizzare l'elaborazione su molti set di dati SAS. – user48956

3

Questa è solo una risposta parziale in quanto non ho trovato alcuna documentazione concreta [di facile lettura].

È possibile visualizzare il codice sorgente here

Questo mostra alcune informazioni di base riguardo a ciò che gli argomenti dei metodi richiedono, come ad esempio:

  • readColumnAttributes (auto, colattr)
  • readColumnLabels (auto, Collabs , coltext, colcount)
  • readColumnNames (self, colname, coltext)

Penso che la maggior parte di ciò che si sta cercando sia memorizzata nella classe "header" restituita durante la creazione di un oggetto con SAS7BDAT. Se stampi solo questa classe, otterrai molte informazioni, ma potrai anche accedere agli attributi della classe. Penso che la maggior parte di ciò che stai cercando potrebbe essere sotto foo.header.cols. Sospetto che tu usi vari attributi di intestazione come parametri per i metodi che menzioni.

Forse qualcosa del genere ti farà avvicinare?

from sas7bdat import SAS7BDAT 
foo = SAS7BDAT(inFile) #your file here... 

for i in foo.header.cols: 
    print '"Atrributes"', i.attr 
    print '"Labels"', i.label 
    print '"Name"', i.name 

edit: non collegati a questa specifica domanda, ma i comandi type() e dir() tornare utile quando si cerca di capire che cosa sta succedendo in una classe sconosciuta/biblioteca

0

so di essere in ritardo per la la risposta, ma nel caso qualcuno cerchi una domanda simile.L'opzione migliore è:

import sas7bdat 
from sas7bdat import * 
foo = SAS7BDAT('/support/sas/locked_data.sas7bdat') 
# This converts to dataframe: 
ds = foo.to_data_frame() 
Problemi correlati