我有这样的数据集(一个制造的例子,但在相同的结构):插入小计
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
,所以这是一个有点脱离我的安乐窝。
感谢您的任何帮助。如果问题不明确,请让我知道。
你会发现显示你当前的努力会让你的问题更好地被社区接受。一般来说,遇到的问题 - “这里是规范 - 给我写一些代码”通常不会很好地被接受。 –
谢谢@JonClements。我可以看到那是怎么回事;那不是我的意图。缺乏细节的原因是因为我对于去哪里真的有点不知所措。我取得的进展很小,但将修改我原来的问题,以反映我所提出的问题。 – seestevecode
谢谢..恐怕我的SAS有10年左右的生疏,所以我现在真的没有足够的时间来回答这个问题,但是肯定有我的+1来支持你的尝试 - 至少这意味着有人可以复制/粘贴并改变,而不是必须从头开始建议一些事情,你正在做什么/出错的事情...... –