我有这个数据集(一个虚构的例子,但结构相同):
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
我故意将其保留,因此并非每个实例都显示每个度量,并且有时会丢失 Doors Closed 总数。CAPS 中的行是我想要添加的行PROC REPORT
,即不在原始数据中。
我已经使用了基本布局PROC REPORT
,但真的不知道从哪里开始按需插入小计。我添加了一个“级别”变量,试图给我一些东西来订购/分组。
我需要每个输出页面一个国家和每个分组按该顺序保存的行,即打开的 XXX 门、打开的总门、关闭的门、平衡,所以我认为可能需要额外的列。
到目前为止,这就是我所做的:
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;
我知道我应该能够使用 level 变量做一些事情,所以我在它之前和之后添加了一些计算块并检查了输出数据集。我尝试添加“打开的总门”的值,但这不起作用。
老实说,我才刚刚开始使用PROC REPORT
,所以这有点超出我的舒适区。
谢谢你的帮助。如果问题不清楚,请告诉我。