首页 > 解决方案 > 在proc sql中按组包含不存在的值 - SAS

问题描述

我对 SAS 编程有疑问。

例如 sashelp.cars,我想按原产地对它们进行分组并总计它们的建议零售价。

问题是,如果我想在按组列表中添加“澳大利亚”,但在 sashelp.cars 中,没有来自澳大利亚的品牌/型号,该怎么办?

我所做的是使用proc sql:

proc sql;
   create table sample as
      select *, sum(MSRP) as total_srp
   from sashelp.cars
   group by origin;
quit;

但在输出数据集样本中,我只看到“亚洲”“欧洲”和“美国”,因为它们是 sashelp.cars 中唯一可用的。

有没有更直接的方法将澳大利亚包含在输出数据集样本中,总 srp 为 0,即使它在 by 组之前不存在?

我在想的是有一个包含完整来源列表的元表:“亚洲”、“欧洲”、“美国”和“澳大利亚”,然后查找 sashelp.cars 以便它具有“虚拟”值在执行 proc sql 之前。

提前致谢

标签: sasproc-sql

解决方案


我会先执行 SQL 步骤,然后将结果与您希望在输出中看到的所有可能来源的元文件合并。

proc sql;
   create table meta (origin char(9));
   insert into meta values('Asia');
   insert into meta values('Australia');
   insert into meta values('Europe');
   insert into meta values('USA');

   create table sample as
      select *
      from meta as m full outer join (
         select *, sum(MSRP) as total_srp
         from sashelp.cars
         group by origin) as s 
      on s.origin = m.origin;


quit;

您可能必须修改select语句(避免使用通配符 - 此代码将重新排序列,确保您从元文件中放置原点- 或使用COALESCE函数将它们从两个文件中放在一起,等等)。

您还应该考虑什么样的连接是合适的。


推荐阅读