2014-04-28 46 views
2

我有这样的数据集(一个制造的例子,但在相同的结构):插入小计

data have; 
    infile datalines delimiter=','; 
    length country city measure $50.; 
    input country $ city $ level measure $ mdate total; 
    informat mdate date9.; 
    format mdate date9.; 
    datalines; 
England,London,1,Red doors opened,24MAR2014,4 
England,London,1,Green doors opened,24MAR2014,6 
England,London,2,Doors closed,24MAR2014,7 
England,London,1,Red doors opened,25MAR2014,5 
England,London,1,Blue doors opened,25MAR2014,4 
England,London,1,Green doors opened,25MAR2014,3 
England,London,2,Doors closed,25MAR2014,6 
England,Manchester,1,Red doors opened,24MAR2014,3 
England,Manchester,2,Doors closed,24MAR2014,1 
England,Manchester,2,Doors closed,25MAR2014,4 
Scotland,Glasgow,1,Red doors opened,24MAR2014,4 
Scotland,Glasgow,1,Red doors opened,25MAR2014,3 
Scotland,Glasgow,1,Green doors opened,25MAR2014,2 
Scotland,Glasgow,2,Doors closed,25MAR2014,4 
;;;; 
run; 

我要输出每一天的门开了“每个国家/城市,然后小计打开的门,然后输出关闭的门,然后减去从关闭的门打开的门,以给出'平衡'(每个国家/城市)。在每个国家的最后,我想要一行总结每个国家的平衡(每天)。

所以上面会看到这样的:

Country + City  + Measure   + 24MAR2014 + 25MAR2014 
---------+------------+--------------------+-----------+---------- 
England + London  + Red doors opened +  4 + 5 
     +   + Green doors opened +  6 + 3 
     +   + Blue doors opened +  . + 4 
     +   + TOTAL DOORS OPENED +  10 + 12 
     +   + Doors closed  +  7 + 6 
     +   + BALANCE   +  -3 + -6 
     + Manchester + Red doors opened +  3 + . 
     +   + TOTAL DOORS OPENED +  3 + . 
     +   + Doors closed  +  1 + 4 
     +   + BALANCE   +  -2 + 4 
     + ALL  + BALANCE   +  -5 + -2 
Scotland + Glasgow + Red doors opened +  4 + 3 
     +   + Green doors opened +  . + 2 
     +   + TOTAL DOORS OPENED +  4 + 5 
     +   + Doors closed  +  . + 4 
     +   + BALANCE   +  -4 + -1 
     + ALL  + BALANCE   +  -4 + -1 

我特意留下它因此不是每个度量在每个实例和车门关闭总有时会丢失。 CAPS中的行是我想要添加的行,即PROC REPORT,即不在原始数据中。

我有使用PROC REPORT的基本布局,但并不真的有一个想法,去哪里按需启动插入小计。我添加了一个'级别'变量,试图给我一些东西来订购/组合。

我需要每个输出页面有一个国家,并且按照每个分组的顺序保留行,即XXX Doors Opened,Total Doors Open,Doors Closed,BALANCE,所以我想也许需要额外的列。

到目前为止,这是我做了什么:

proc report data=have out=proc; 
    by country; 
    columns city level measure mdate,total; 
    define city/group; 
    define level/group noprint; 
    define measure/group; 
    define mdate/across; 
    define total/analysis sum; 

    compute before level; 
     endcomp; 

    compute after level; 
     if level = 2 and break = '_level_' then do; 
      measure = 'TOTAL DOORS OPENED'; 
      end; 
     endcomp; 
run; 

我知道我应该能够使用级变量做一些事情,所以我之前和之后,并加入了一些计算块检查输出数据集。我试着添加'TOTAL DOORS OPENED'的值,但这不起作用。

说实话,我刚开始使用PROC REPORT,所以这是一个有点脱离我的安乐窝。

感谢您的任何帮助。如果问题不明确,请让我知道。

+1

你会发现显示你当前的努力会让你的问题更好地被社区接受。一般来说,遇到的问题 - “这里是规范 - 给我写一些代码”通常不会很好地被接受。 –

+0

谢谢@JonClements。我可以看到那是怎么回事;那不是我的意图。缺乏细节的原因是因为我对于去哪里真的有点不知所措。我取得的进展很小,但将修改我原来的问题,以反映我所提出的问题。 – seestevecode

+0

谢谢..恐怕我的SAS有10年左右的生疏,所以我现在真的没有足够的时间来回答这个问题,但是肯定有我的+1来支持你的尝试 - 至少这意味着有人可以复制/粘贴并改变,而不是必须从头开始建议一些事情,你正在做什么/出错的事情...... –

回答

1

有时(常常为我的工作领域),这是更好地把PROC报告看中PROC PRINT,让你的计算中的数据集。

我会添加喜欢的类型,表示如果该条目告诉我们打开或关闭车门,计算由contry /城市/级别/类型/天总和的变量;我还会复制所有等级为3的观测值(表中的平衡值),并取消TYPE =关闭的测量值,然后按照国家/城市/天计算总和,然后将所有结果一起叠加到一个数据集中, ID =天。 PROC REPORT可以从此处取得。不要过多地信任COMPUTE块,它们通常很有用,但可以调试。只需创建一个数据集,并将其显示为所需的表并将其传送到REPORT。

+0

嗨安东。感谢您的回答。这几乎是我所做的 - 在问题中看到我对乔的评论。我明天会发布我的答案。谢谢你的时间。 – seestevecode