2014-04-28 54 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