如何解决在proc sql-SAS中按组包含不存在的值
我有一个关于 SAS 编程的问题。
例如 sashelp.cars,我想按原产地对它们进行分组并合计它们的建议零售价。
问题是,如果我想在 by group 列表中添加“Australia”,但在 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 中唯一可用的。
是否有更直接的方法将澳大利亚包含在输出数据集样本中,并且 total_srp 为 0,即使它在 by 组之前不存在?
我在想的是有一个包含完整来源列表的元表:'亚洲''欧洲'、'美国'和“澳大利亚”,然后查找 sashelp.cars 以便它有一个 '执行 proc 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 语句(避免使用通配符 - 此代码将对列重新排序,确保您将 origin 来自 meta 文件 - 或使用 COALESCE 函数将它们从两个文件中组合在一起,等等)。
你还应该考虑什么样的join是合适的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。