如何在填充缺失值后按指定运营商进行数据分组(含SAS代码)
针对运营商分组的SAS实现方案
没问题!你已经用proc stdize搞定了缺失值填充的关键一步,接下来只需要在补全好的数据集基础上,按carrier做分组分析就行,我给你两种SAS里常用的实现方式:
首先,先帮你修正下缺失值填充代码里的小细节(SAS变量列表用空格分隔而非逗号),确保语法正确:
proc stdize data=mydata.original_data reponly method=mean out=Complete_data; var total_travel_time arrival_delay; /* SAS变量间用空格分隔,已调整避免语法错误 */ run;
补充说明:
reponly参数确保只替换缺失值不做标准化,method=mean会用对应变量的均值填充缺失值,生成的Complete_data就是我们后续分组要用的干净数据集。
方法1:用PROC SQL自定义分组统计
如果你需要灵活自定义分组后的统计内容(比如每个运营商的平均旅行时间、延误时长、总航班数),PROC SQL是绝佳选择:
proc sql; create table carrier_grouped_results as select carrier, count(*) as total_flights label='总航班数', mean(total_travel_time) as avg_travel_time format=8.2 label='平均旅行时间', mean(arrival_delay) as avg_arrival_delay format=8.2 label='平均到达延误' from Complete_data group by carrier; /* 按运营商名称分组 */ quit;
这个代码会生成一个新数据集,每条记录对应一个运营商的统计结果,格式清晰便于后续分析。
方法2:用PROC MEANS快速生成多维度分组统计
如果只需要常用统计指标(均值、中位数、总和等),PROC MEANS更简洁高效,适合快速输出批量统计结果:
proc means data=Complete_data n mean median sum maxdec=2; class carrier; /* 指定分组变量为运营商 */ var total_travel_time arrival_delay; /* 指定要分析的目标变量 */ output out=carrier_stats_summary /* 将统计结果保存到数据集 */ mean=avg_travel avg_delay median=med_travel med_delay; run;
n计算每组的记录数,mean/median分别计算均值和中位数maxdec=2控制输出结果保留两位小数output语句可以把统计指标映射成自定义命名的变量,方便后续调用
这样就能轻松完成「缺失值填充+按运营商分组」的完整需求啦!
内容的提问来源于stack exchange,提问作者Dhruv Nautiyal




