[英]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()的例子嗎?
謝謝,所有。
這只是部分答案,因為我沒有找到[易於閱讀]的具體文檔。
您可以在此處查看源代碼
這顯示了有關方法所需參數的一些基本信息,例如:
我認為你所使用的大部分內容存儲在使用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
我個人認為更好的方法是使用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.