2013-10-28 228 views
7

我必須從SAS數據集轉儲數據。我發現一個名爲sas7bdat.py的Python模塊,它可以讀取SAS .sas7bdat數據集,我認爲使用Python而不是SAS來執行項目會更簡單,更直接,因爲需要其他功能。然而,在交互式Python幫助(sas7bdat)不是非常有用的,唯一的例子我能找到轉儲數據集如下: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') 

這不會做我想做的,因爲一)使用SAS變量名作爲列標題,我需要它使用變量標籤,並且b)它使用「nan」來表示缺少的數字值,我寧願將值留空。

任何人都可以指向我包含在sas7bdat.py中的方法的一些有用的文檔?我已經搜索了每個我能想到的關鍵詞的排列,沒有運氣。如果沒有,有人可以給我一個例子或兩個使用readColumnAttributes(),readColumnLabels()和/或readColumnNames()?

謝謝,所有。

回答

2

我個人認爲更好的方法是使用SAS導出數據,然後根據需要使用Python處理外部文件。

在SAS,你可以做到這一點...

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

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

這樣做的缺點是,雖然在列標籤中使用,而不是變量名,標籤封裝在雙引號。在Python中處理時,如果它們導致問題,您可能需要以編程方式刪除它們。我希望即使它不像你想要的那樣使用Python也能起到幫助作用。

+0

不是每個人都可以訪問SAS--你只需要爲每個用戶提供數千美元的解決方案。哎喲!如果您打算以任何方式用Python處理數據,那麼使用python庫加載數據也可以最大限度地減少軟件依賴性,並可以在許多SAS數據集上自動執行處理。 – user48956

3

這只是一個部分的答案,因爲我沒有發現[容易閱讀]具體的文檔。

您可以查看源代碼here

這表明對於一些基本的信息是什麼參數的方法要求,如:

  • readColumnAttributes(個體經營,colattr)
  • readColumnLabels(自我,的協作者,coltext,colcount)
  • readColumnNames(self,colname,coltext)

我認爲大部分的內容都存儲在使用SAS7BDAT創建對象時返回的「header」類中。如果你只是打印這個類,你會得到很多信息,但是你也可以訪問類屬性。我想大部分你可能要找的東西都在foo.header.cols下。我懷疑你使用各種標題屬性作爲你提到的方法的參數。

也許這樣的事情會讓你更接近?

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 

編輯:無關的這個具體問題,而是試圖找出什麼是在一個陌生的班級正在進行時type()dir()命令派上用場/庫

0

我知道我遲到答案,但如果有人搜索類似的問題。最好的選擇是:

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