2016-12-05 261 views
0

我有一个数据表的列:年,月,销售额。它实际上是一个汇总表,就像Excel中的数据透视表一样。SAS行/列未出现(表格格式问题)

有了这张表,如果没有一个月的销售报告(即不是0销售额,但没有提及销售额,所以SAS不能指出某个月的价值),那么整行就会消失。

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

注:几个月没有日历月,因此如果正在使用proc summaryproc means,实现排序输出你想提供的一种方式创建的表,你可以有关于2011年

+0

你能告诉我们表是如何创建的吗?你需要描述在哪里找到或如何确定所有可能的月份。 – Tom

+0

它来自一个大表,每个销售完成,销售日期和销售价值。然后按日期和月份对日期进行分组,并且销售额累计。因此,如果某个月没有销售,那么该月不会出现在此汇总表中(如上所述)。我能想到的唯一解决方案是在0个销售额中添加虚拟数据,以便在每个月(和几年)都会下降并迫使他们出现。 – user43080

+0

月份超过12个月的原因是,这笔交易可能在2011年正式开始,但实际上在2016年完成,即60个月后。虽然我不确定这对于提出解决方案太有帮助 – user43080

回答

2

month60您的数据中每个月至少有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中指定的那些行,并根据观察到的单向值为所有可能的组合添加行,就像您指定了completetypes一样。

+0

我需要最后一个方法(对于他们从未真正出现在我的数据中的地方)。但是,在开始时,用户可以定义宏观变量(例如%让ReportBasis = Year,然后流过代码的其余部分以防止手动更改代码),以确定他们是希望按月还是按年或四分之一。这些宏变量因此会根据所选内容改变表格的布局。第二个选项可以适应更多的动态吗? – user43080

+0

宏观变量在proc概要中似乎不起作用。目前它只是一个proc sql,它从大表中选择变量(其中一些是宏),然后对它们进行分组。 – user43080

+0

如果使用正确,宏变量可用于生成您喜欢的任何代码。如果你想要求帮助,请发布一个单独的问题,并提供一个完整的可重现的例子你的proc摘要代码。 – user667489