簡體   English   中英

Python sas7bdat模塊用法

[英]Python sas7bdat module usage

我必須從SAS數據集轉儲數據。 我找到了一個名為sas7bdat.py的Python模塊,它說它可以讀取SAS .sas7bdat數據集,我認為由於需要其他功能,用Python而不是SAS來完成項目會更簡單,更直接。 但是,交互式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')

這不符合我的要求,因為a)它使用SAS變量名作為列標題,我需要它使用變量標簽,b)它使用“nan”來表示缺少的數值,我寧願離開值空白。

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

謝謝,所有。

這只是部分答案,因為我沒有找到[易於閱讀]的具體文檔。

您可以在此處查看源代碼

這顯示了有關方法所需參數的一些基本信息,例如:

  • readColumnAttributes(self,colattr)
  • readColumnLabels(self,collabs,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()命令會派上用場

我個人認為更好的方法是使用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。

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

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

隨着時間的推移,解決方案變得更容 我想如果你想和熊貓一起工作,這個最簡單:

import pandas as pd
df = pd.read_sas('/support/sas/locked_data.sas7bdat')

請注意,使用df.values很容易獲得numpy數組

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM