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

基于多条件计算均值填充air_time缺失值的SAS实现求助

批量填充air_time缺失值的SAS实现方案

没问题,我帮你搞定这个批量填充air_time缺失值的SAS需求,完全贴合你的业务规则——按相同航空公司代码、出发机场和到达机场分组计算均值来补全缺失数据。下面是具体的实现方案,分步骤给你讲清楚:

1. 先计算各分组的平均飞行时间

首先我们需要基于航空公司代码、出发机场、到达机场这三个维度分组,计算每个组里有效air_time的平均值。用PROC SQL来做这件事非常直观:

/* 按分组维度计算有效air_time的平均值,排除缺失值 */
proc sql;
    create table flight_airtime_means as
    select airline_code, origin, dest,
           mean(air_time) as avg_airtime format=8.1  /* 格式可根据你的数据精度调整 */
    from flight_data  /* 这里替换成你的实际数据集名称 */
    where air_time is not missing  /* 只使用有有效飞行时间的记录计算均值 */
    group by airline_code, origin, dest;
quit;

这一步会生成一个包含每个分组对应平均飞行时间的临时表,后续用来填充缺失值。

2. 合并数据并填充缺失值

接下来把原始数据集和刚才生成的分组均值表合并,对原始数据里所有air_time缺失的记录进行批量填充:

/* 合并原始数据与分组均值表,填充缺失的air_time */
data flight_data_filled;  /* 生成填充后的新数据集 */
    merge flight_data (in=original) flight_airtime_means;
    by airline_code origin dest;  /* 按分组维度匹配 */
    
    /* 处理缺失值:如果air_time为空,用分组均值填充 */
    if air_time is missing then do;
        /* 如果当前分组有有效均值,就用它填充 */
        if avg_airtime is not missing then air_time = avg_airtime;
        /* 可选:如果某个分组所有air_time都是缺失的(没有均值),可以用全局均值兜底 */
        /* else air_time = &global_avg_airtime; */
    end;
    
    drop avg_airtime;  /* 不需要保留均值变量,可根据需求决定是否删除 */
run;

可选:处理分组全缺失的情况

如果存在某些分组(同一航空公司、出发/到达机场)的所有air_time都是缺失的,上面的代码会让这些记录的air_time保持缺失。如果你想用全局平均飞行时间来兜底,可以先计算全局均值:

/* 提前计算全局air_time的平均值,存储到宏变量中 */
proc sql noprint;
    select mean(air_time) into :global_avg_airtime format=8.1
    from flight_data
    where air_time is not missing;
quit;

然后把刚才DATA步里的注释去掉,就能用全局均值填充那些分组全缺失的情况了。

这个方案可以批量处理数据集中所有air_time缺失的记录,不管有多少条缺失,只要匹配到对应的分组,就会自动用均值填充,完全符合你的业务要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:17:44