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

如何在PROC SQL中保留计数为0的交通方式统计条目?

解决SAS统计交通方式时保留0计数条目问题

要确保结果始终包含全部12种交通方式(包括使用人数为0的条目),核心思路是用包含所有交通方式的维度表与统计结果做左连接,将缺失的计数补为0。具体实现步骤如下:

1. 创建包含全部12种交通方式的维度表

如果没有现成的维度表,手动创建一个临时表,列出所有交通方式的取值(替换成你实际的R_fard_h编码/名称):

PROC SQL;
CREATE TABLE transport_list AS
SELECT * FROM VALUES (
    ('步行'), ('公交'), ('地铁'), ('私家车'), ('出租车'), ('自行车'),
    ('火车'), ('飞机'), ('轮船'), ('网约车'), ('共享单车'), ('其他')
) AS t(R_fard_h);
QUIT;

注:如果R_fard_h是数字类型(如1-12),则把括号内的字符串改成对应数字,比如(1), (2), ..., (12)。

2. 左连接维度表与统计结果,补0并计算占比

通过左连接保留维度表的所有条目,用COALESCE函数将缺失的计数转为0,再计算占比:

PROC SQL;
CREATE TABLE hjälptabell_transport_SE AS
SELECT 
    tl.R_fard_h,
    COALESCE(st.antal, 0) AS antal,
    COALESCE(st.antal, 0) / SUM(COALESCE(st.antal, 0)) OVER () AS kvot
FROM transport_list tl
LEFT JOIN (
    -- 原统计逻辑,仅筛选有数据的交通方式
    SELECT R_fard_h, COUNT(R_fard_h) AS antal
    FROM data_resor14_2
    WHERE R_fard_h IS NOT MISSING AND R_res_land_grp="Sverige"
    GROUP BY R_fard_h
) st ON tl.R_fard_h = st.R_fard_h;
QUIT;

关键逻辑说明:

  • 左连接:保证维度表中的12种交通方式全部保留,即使统计子查询中没有对应条目。
  • COALESCE函数:将左连接后缺失的antal(即使用人数为0的情况)转换为0。
  • 窗口函数SUM(...) OVER ():计算所有实际使用人数的总和(0不影响总和),确保占比计算逻辑与原需求一致。

如果你的系统中已经存在包含全部交通方式的维度表(如业务系统中的基础代码表),直接用该表替换上述的transport_list即可,无需手动创建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:01:13