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

请求SAS数据步编写与优化:识别未下单客户、统计客户订单量

SAS场景实现与优化方案

场景1:识别未下过任何订单的客户列表

原代码问题

你提供的代码存在逻辑缺陷:merge order_newcustomer_table 未明确指定两个表的in=标记,合并逻辑不完整,无法准确筛选出无订单的客户。

可选实现方式

方式1:带in=选项的数据步

这是数据步的标准写法,通过in=标记区分客户表和订单表的观测,精准筛选无订单客户:

data no_order_customers;
  merge customers(in=c) orders(in=o);
  by CustomerID;
  if c and not o; /* 仅保留在客户表存在、订单表无匹配的记录 */
run;

方式2:PROC SQL(更直观)

如果追求代码可读性,PROC SQL的左连接+空值判断写法更易懂:

proc sql;
  create table no_order_customers as
  select c.*
  from customers c
  left join orders o on c.CustomerID = o.CustomerID
  where o.CustomerID is null;
quit;

场景2:统计每位客户的总订单数

推荐最优方案:PROC SQL

代码简洁,逻辑清晰,一步完成关联与统计,无需多步处理,是大多数场景下的首选:

proc sql;
  create table customer_order_count as
  select c.CustomerID, c.CustomerName, c.ContactName, c.Country,
         count(o.OrderID) as TotalOrders format=8.
  from customers c
  left join orders o on c.CustomerID = o.CustomerID
  group by c.CustomerID, c.CustomerName, c.ContactName, c.Country;
quit;

其他可选实现方式

方式1:数据步(适合复杂逻辑扩展)

如果需要在统计前后添加自定义逻辑(如条件转换、特殊标记),数据步更灵活:

/* 先按客户ID汇总订单数 */
data order_summary;
  set orders;
  by CustomerID;
  if first.CustomerID then TotalOrders = 0;
  TotalOrders + 1; /* 累加器自动保留值,无需retain */
  if last.CustomerID; /* 仅保留每个客户的最后一条汇总记录 */
  keep CustomerID TotalOrders;
run;

/* 合并到客户表,无订单的客户补0 */
data customer_order_count;
  merge customers order_summary;
  by CustomerID;
  if missing(TotalOrders) then TotalOrders = 0;
run;

方式2:PROC FREQ(高效统计)

如果仅需快速统计订单数,PROC FREQ执行效率更高,后续再合并客户信息即可:

proc freq data=orders noprint;
  tables CustomerID / out=order_summary(rename=(count=TotalOrders) drop=percent);
run;

/* 合并到客户表,补全无订单客户的订单数为0 */
data customer_order_count;
  merge customers order_summary;
  by CustomerID;
  if missing(TotalOrders) then TotalOrders = 0;
run;

方案对比

  • PROC SQL:代码最简洁,逻辑直观,一次性完成关联统计,维护成本低,优先推荐。
  • 数据步:灵活性强,适合需要嵌入复杂业务逻辑的场景,但代码步骤较多。
  • PROC FREQ:针对订单数统计的场景效率高,但仅能输出统计结果,需额外合并客户信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 08:44:54