簡體   English   中英

如何通過 pyreadstat?meta.original_variable_types 從 sas7bdat 文件中讀取數據類型,給出不同的值?

[英]How to read DATA type from a sas7bdat file through pyreadstat?meta.original_variable_types giving different values?

import pyreadstat
df, meta = pyreadstat.read_sas7bdat('c:/ae.sas7bdat')
print(meta.original_variable_types)

此代碼打印值如下

{
    "TRIAL_NAME":"$",
    "SITEMNEMONIC":"$",
    "PATIENTNUMBER":"$",
    "VISITID":"BEST",
    "VISITREFNAME":"$",
    "SEQ":"BEST",
    "PANELNAME":"$",
    "STATUS":"DND",
    "COMPDT":"$",
    "COMPTM":"$",
    "SPECID":"$"
}

從 SAS 文檔中,我了解到$代表字符, BEST代表數字。 但是其他類型是什么呢? 當我在 SAS 查看器中打開文件時,我可以看到類型為字符和數字。 我怎樣才能找回它? 附加來自 SAS 查看器的元信息圖像。 我想檢索那種type

元信息

如果您只需要類型,那么很容易:在pyreadstat中如果$則它是字符,如果不是,它是數字。

您在 pyreadstat 中看到的是 SAS 的格式列中沒有可變寬度(單獨存儲在 meta.variable_display_width 的 pyreadstat 中)的內容。 您將在屏幕截圖中觀察到所有字符變量的格式都以 $ 開頭,接下來的數字是變量寬度。

SAS 只有兩種類型:字符和數字,因此如果不是字符,它就是數字。 該格式告訴 SAS 如何顯示變量。 對於字符,它只是顯示具有 cerain 寬度的字符 ($),因為沒有其他選擇。 數字可以以不同的方式顯示,例如 BEST,但如果它們表示自 1960 年 1 月 1 日以來的天數,也可以顯示為 DATE,如果它們表示自 1960 年 1 月 1 日以來的秒數,則顯示為 DATETIME,等等。

如果缺少格式,您可以檢查列中的數據是否為字符串,在這種情況下,SAS 中的類型為字符。 其他任何東西都是數字:

import pyreadstat

df, meta = pyreadstat.read_xport('file.xpt')
dtypes = zip(list(df.columns), list(df.dtypes))

sas_types = dict()
for colname, coltype in dtypes:
    if coltype == object:
        nonan = df[colname].dropna()
        if not nonan.empty:
            if type(nonan[0]) == str:
                sas_types[colname] = 'character'
            else:
                sas_types[colname] = 'numeric'
        else:
            sas_types[colname] = '?'
    else:
        sas_types[colname] = 'numeric'

編輯:

在 pyreadstat 1.1.0 版中,您現在有了 meta.readstat_variable_types。 這是一個以變量名為鍵的字典,而值為從文件中提取的二進制類型Readstat。 對於 SAS 和 SPSS,您可能會得到“字符串”(字符)或“雙精度”(數字)。 在 Stata 中,您可能還會得到“int8”、“int32”和浮點數。

暫無
暫無

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

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