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;

国/都市ごとに「開いたドア」を1日ごとに出力し、開いたドアの小計を出してから、閉じたドアを出力し、閉じたドアから開いたドアを差し引いて「バランス」(国/都市ごと)を求めます。各国の最後に、各国の残高 (1 日あたり) を合計する 1 つの行が必要です。

したがって、上記は次のようなものになります。

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必要に応じて小計の挿入を開始する場所がわかりません。「レベル」変数を追加して、注文/グループ化する何かを試してみました。

出力ページごとに 1 つの国が必要で、行はグループごとにその順序で維持されます。つまり、XXX ドアが開いた、TOTAL DOORS OPENED、ドアが閉じた、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ので、これは私の快適ゾーンから少し外れています。

助けてくれてありがとう。質問が明確でない場合はお知らせください。

4

1 に答える 1

1

場合によっては (多くの場合、私の仕事の分野では)、PROC REPORT を派手な PROC PRINT と見なし、データセットで計算を行う方がよい場合があります。

エントリが開いているドアまたは閉じているドアについて教えてくれるかどうかを示す TYPE のような変数を追加し、国/都市/レベル/タイプ/日ごとに合計を計算します。また、level= 3 (テーブルの BALANCE を意味する) ですべての観測値を複製し、TYPE=closed のメジャーを否定し、国/都市/日ごとに合計を計算し、すべての結果を適切なキーを使用して 1 つのデータセットに積み上げ、転置します。 ID=日で。そこから PROC REPORT で取得できます。COMPUTE ブロックを信頼しすぎないでください。多くの場合便利ですが、デバッグするのは大変です。目的のテーブルとして表示されるデータセットを作成し、それを REPORT にスローするだけです。

于 2014-04-28T20:26:23.440 に答える