使用SAS SQL统计仅归属单一首字符类别分组的唯一物品数量
SAS SQL 实现单一首字符类别物品统计方案
核心逻辑拆解
要实现需求,需完成三个关键动作:
- 提取
category_code的首字符作为分组依据 - 对同一物品在同一首字符下的重复记录去重
- 筛选出仅归属单一首字符的物品,再按首字符统计数量
方案一:多步骤实现(适合新手理解)
通过临时表逐步处理,逻辑清晰易调试:
步骤1:提取并去重物品-首字符关联
去除同一物品在同一首字符下的重复记录,得到每个物品对应的唯一首字符集合:
PROC SQL; CREATE TABLE item_first_char AS SELECT DISTINCT item_id, SUBSTR(category_code, 1, 1) AS first_char -- 提取首字符 FROM item_categories; QUIT;
步骤2:筛选仅归属单一首字符的物品
统计每个物品对应的不同首字符数量,只保留数量为1的物品:
PROC SQL; CREATE TABLE valid_items AS SELECT item_id, first_char FROM item_first_char GROUP BY item_id HAVING COUNT(first_char) = 1; -- 仅保留只有1个首字符的物品 QUIT;
步骤3:按首字符分组统计数量
对符合条件的物品按首字符分组,统计每组的物品数量:
PROC SQL; SELECT first_char AS category_group, COUNT(item_id) AS item_count FROM valid_items GROUP BY first_char; QUIT;
方案二:单查询嵌套实现(简洁高效)
将多步骤合并为一个嵌套查询,适合熟悉SQL逻辑后使用:
PROC SQL; SELECT first_char AS category_group, COUNT(item_id) AS item_count FROM ( -- 筛选仅归属单一首字符的物品 SELECT item_id, first_char FROM ( -- 提取并去重物品-首字符关联 SELECT DISTINCT item_id, SUBSTR(category_code, 1, 1) AS first_char FROM item_categories ) AS distinct_chars GROUP BY item_id HAVING COUNT(first_char) = 1 ) AS valid_items GROUP BY first_char; QUIT;
关键细节说明
SUBSTR(category_code, 1, 1):提取category_code的第一个字符,兼容Hadoop Hive SQL语法DISTINCT/GROUP BY item_id, first_char:确保同一物品在同一首字符下仅被统计一次HAVING COUNT(first_char) = 1:过滤掉跨多个首字符类别的物品,只保留归属单一首字符的物品
内容的提问来源于stack exchange,提问作者C111
相关产品推荐
相关产品推荐

