【问题标题】:Forcing rows to appear despite data missing尽管数据丢失,但仍强制显示行
【发布时间】:2017-04-22 17:59:02
【问题描述】:

我有一个大型数据集(下面称为输入),其中包含各种信息,例如销售日期、交易日期、付款、销售。

用户可以按年、季度或月生成报表,以显示某个销售年度的特定月/季度/年的付款金额。因此,您可以在首次销售 5 年后付款,即 2016 年的付款与 2011 年的销售年度有关。

用户可以通过使用宏变量(即%let ReportBasis = Year)来决定是否希望在代码开头按月/季度/年来设置这些付款期,并且可以通过其余部分调用ReportBasis无需手动调整的代码。

报告是使用以下方法生成的:

proc sql;
create table report as
select sales_year, &ReportBasis, Sum(Sales) as Sales
from input
group by sales_year, &ReportBasis;
quit;

现在我遇到的问题是,如果在特定时期内没有针对所有相关销售年份的付款,那么该时期就没有行。这会产生布局问题。

我需要一个解决方案,由于宏观变量的性质(从一年到一个月到另一个季度),它可以是动态的。

所以我有这个(例子):

2011    Month 11       100
2011    Month 12       250
2011    Month 13       85
2011    Month 15       90
2011    Month 16       300

但我需要这个:

2011    Month 11       100
2011    Month 12       250
2011    Month 13       85
2011    Month 14       0
2011    Month 15       90
2011    Month 16       300

在我的所有数据(甚至其他年份 2012 年、2013 年等)中,第 14 个月没有实际付款,所以它没有出现在我的第一个表中,但第二个表仍然聪明地知道包含它.

提前致谢。

【问题讨论】:

  • 使用日历表(谷歌搜索)

标签: sql database sas


【解决方案1】:

这是一种假设所有年份和报告都以input 表示的解决方案,但并非所有组合:

create table report as
    select sy.sales_year, r.rb, Sum(i.Sales) as Sales
    from (select distinct sales_year from input) sy cross join
         (select distinct &ReportBasis as rb from input) r left join
         input i
         on i.sales_year = sy.sales_year and i.&ReportBasis = r.&ReportBasis
    group by sy.sales_year, r.rb;

【讨论】:

  • 这给出了 4 个错误,每个错误 2 个:在用相关名称 r 标识的表/视图中找不到列 report_month。模棱两可的参考,列 sales_year 在多个表中。我该如何解决?我对连接不是很熟悉
  • 最近的编辑删除了后者的错误,但前者仍然存在。
  • @user43080 。 . .我不知道你的数据是如何构成的。命名似乎与您查询中的命名一致。
  • 那么report_month来自宏变量&ReportBasis。它也可以是 report_year 或 report_quarter,具体取决于用户定义的内容。该列肯定在我的输入表中 - 在将其分配给相关名称 r 之前我需要执行一个步骤吗?
  • 与我使用 SAS Enterprise Guide 7.1 的事实无关?
猜你喜欢
  • 2014-07-22
  • 2023-01-30
  • 2019-04-26
  • 1970-01-01
  • 2016-07-02
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
  • 2017-06-15
相关资源
最近更新 更多