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

我故意将其保留,因此并非每个实例都显示每个度量,并且有时会丢失 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,所以这有点超出我的舒适区。

谢谢你的帮助。如果问题不清楚,请告诉我。

4

1 回答 1

1

有时(通常对于我的工作领域)最好将 PROC REPORT 视为一种奇特的 PROC PRINT 并在数据集中进行计算。

我会添加一个类似 TYPE 的变量,表示该条目是否告诉我们打开或关闭的门,然后按国家/城市/级别/类型/天计算总和;我也将复制所有级别= 3的观察结果(意思是表中的平衡)并否定类型=关闭的度量,然后按国家/城市/天计算总和,他们用适当的键将所有结果堆叠在一个数据集中并转置ID=天。PROC REPORT 可以从那里获取它。不要太相信 COMPUTE 块,它们通常很有用,但很难调试。只需制作一个显示为所需表格的数据集,然后将其提交给 REPORT。

于 2014-04-28T20:26:23.440 回答