在 proc sql 中按组包含不存在的值 - SAS

Include non existent value to by group in proc sql - SAS

我对 SAS 编程有疑问。

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

问题是,如果我想在by group列表中添加'Australia',但是在sashelp.cars中没有来自澳大利亚的make/model怎么办?

我做的是使用proc sql:

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

但是在输出数据集示例中,我只看到 'Asia' 'Europe' 和 'USA' 因为它们是 sashelp.cars.

中唯一可用的

是否有更直接的方法将澳大利亚包含在 0 total_srp 的输出数据集样本中,即使它在按组之前不存在?

我在想的是有一个包含完整来源列表的元 table:'Asia' 'Europe'、“美国”和“澳大利亚”,然后查找sashelp.cars 这样它在执行 proc sql.

之前会有一个 'dummy' 值

提前致谢

我会先执行 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 语句(避免通配符 - 此代码将重新排序列,确保您输入 origin meta 文件中的 - 或者使用 COALESCE 函数将两个文件中的它们放在一起,等等)。

你也想想join什么样的才合适