【问题标题】:SAS Rows/Columns Not Appearing (Table Formatting Issue)SAS 行/列未出现(表格格式问题)
【发布时间】:2016-12-05 15:40:39
【问题描述】:

我有一个包含以下列的数据表:年、月、销售额。它实际上是一个汇总表,就像 excel 中的数据透视表。

使用此表,如果一个月内没有报告销售(即不是 0 销售,但没有提及销售,因此 SAS 无法确定某个月份的值),那么整行将消失。

我不希望这种情况发生,而是希望该行显示 0 而不是不出现。有没有办法改变它的格式以确保每一行都会出现?

注意:月份不是日历月,因此您可以使用与 2011 年相关的 month60。

【问题讨论】:

  • 您能告诉我们该表是如何创建的吗?您需要描述在哪里可以找到或如何确定所有可能的月份。
  • 它来自一张大桌子,上面有每笔交易的完成情况、销售日期和销售价值。然后按年份和月份对日期进行分组,并对销售额进行统计。因此,如果特定月份没有销售,则该月份不会出现在此汇总表中(如上所述)。我能想到的唯一解决方案是添加销售量为 0 的虚拟数据,这样它就会在每个月(和几年)中下降并强制它们出现。
  • 月数能超过12个月的原因是销售可能在2011年正式开始,但实际上在2016年完成,即60个月后。虽然我不确定这对提出解决方案有多大帮助
  • 听起来好像您可以对销售开始日期和销售完成日期使用单独的列,并可能分别按每个列进行汇总。

标签: formatting sas format


【解决方案1】:

如果表是使用 proc summaryproc means 创建的,如果数据中每个月至少有 1 行,则实现所需输出的一种方法是使用 completetypes 选项,例如

proc summary data = sashelp.class completetypes;
 class sex age;
 var weight;
 output out = mysummary mean=;
run;

这会为 Sex = F、Age = 16 生成频率为 0 的行,而不是完全跳过该输出。

一种更可靠但更费力的方法是使用classdata 选项,例如

data myclassdata;
  do SEX = 'M','F';
    do AGE = 13 to 17;
      output;
    end;
  end;
run;

proc summary nway data = sashelp.class classdata=myclassdata exclusive;
 class sex age;
 var weight;
 output out = mysummary2 mean=;
run;

此处的exclusive 选项将输出限制为classdata 数据集中存在的级别组合。如果没有它,您至少会获得 classdata 中指定的那些以及基于观察到的 1-way 值的所有可能组合的行,就像您指定了 completetypes

【讨论】:

  • 我需要最后一种方法(因为它们实际上从未出现在我的数据中)。但是,在开始时,用户可以定义宏变量(例如,%let ReportBasis = Year,然后流经其余代码以防止手动更改代码),以确定他们是否希望按月或按年查看销售额或按季度。因此,这些宏变量将根据所选择的内容改变表格的布局。第二个选项可以调整为更具动态性吗?
  • 而且宏变量似乎在过程摘要中不起作用。目前它只是一个proc sql,它从大表中选择变量(其中一些是宏)然后对它们进行分组。
  • 如果使用正确,宏变量可用于生成您喜欢的任何代码。如果您想寻求帮助,请发布一个单独的问题,其中包含完整的可重现示例您的 proc 摘要代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多