You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中识别SAS7BDAT文件中的已标记删除观测值

解决SAS已标记删除观测值的Python导入问题

一、Python中直接识别并过滤已删除观测值

使用sas7bdat库的底层读取方法,可以获取观测值的删除标记(若之前仅用快速转DataFrame的方式,会忽略该属性)。具体代码如下:

from sas7bdat import SAS7BDAT
import pandas as pd

active_records = []
with SAS7BDAT("your_dataset.sas7bdat") as sas_file:
    for row in sas_file:
        # 仅保留未被标记删除的观测
        if not row.is_deleted:
            active_records.append(row.record)

clean_df = pd.DataFrame(active_records, columns=sas_file.column_names)

二、SAS预处理:提前移除已删除观测值

若能访问SAS环境,预处理是最高效的方案,有两种实现方式:

方式1:生成仅含活跃观测的新数据集

data cleaned_sas_data;
    set original_sas_data;
    /* SAS内置变量_DELETED_为1表示已删除,0表示活跃 */
    if not _DELETED_;
run;

将生成的cleaned_sas_data.sas7bdat导入Python即可,无需额外处理。

方式2:永久清理原数据集

若需要彻底移除原数据集中的已标记观测,可使用proc datasets工具:

proc datasets library=your_lib nolist;
    modify original_sas_data;
    pack; /* 压缩数据集,彻底删除已标记删除的观测 */
quit;

执行后原数据集将不再包含已标记删除的观测,后续直接导入Python即可。

三、结合pyreadstat的变通方案

若偏好使用pyreadstat,可先在SAS中为数据集添加删除标记变量,再导入Python后过滤:

  1. SAS侧添加标记变量:
data data_with_delete_flag;
    set original_sas_data;
    /* 新增变量存储删除状态 */
    is_deleted = _DELETED_;
run;
  1. Python侧读取并过滤:
import pyreadstat

df, meta = pyreadstat.read_sas7bdat("data_with_delete_flag.sas7bdat")
# 过滤活跃观测
clean_df = df[df["is_deleted"] == 0]

内容的提问来源于stack exchange,提问作者Pyhawk2022

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 17:43:26