2016-12-05 72 views
0

我有一個數據表的列:年,月,銷售額。它實際上是一個彙總表,就像Excel中的數據透視表一樣。SAS行/列未出現(表格格式問題)

有了這張表,如果沒有一個月的銷售報告(即不是0銷售額,但沒有提及銷售額,所以SAS不能指出某個月的價值),那麼整行就會消失。

我不希望發生這種情況,而是希望該行顯示0而不是不顯示。有沒有辦法改變這種格式來確保每一行都會出現?

注:幾個月沒有日曆月,因此如果正在使用proc summaryproc means,實現排序輸出你想提供的一種方式創建的表,你可以有關於2011年

+0

你能告訴我們表是如何創建的嗎?你需要描述在哪裏找到或如何確定所有可能的月份。 – Tom

+0

它來自一個大表,每個銷售完成,銷售日期和銷售價值。然後按日期和月份對日期進行分組,並且銷售額累計。因此,如果某個月沒有銷售,那麼該月不會出現在此彙總表中(如上所述)。我能想到的唯一解決方案是在0個銷售額中添加虛擬數據,以便在每個月(和幾年)都會下降並迫使他們出現。 – user43080

+0

月份超過12個月的原因是,這筆交易可能在2011年正式開始,但實際上在2016年完成,即60個月後。雖然我不確定這對於提出解決方案太有幫助 – user43080

回答

2

month60您的數據中每個月至少有1行是使用completetypes選項,例如

proc summary data = sashelp.class completetypes; 
class sex age; 
var weight; 
output out = mysummary mean=; 
run; 

對於Sex = F,Age = 16,這會產生頻率爲0的行,而不是完全跳過該輸出。

即使某些數值從未出現在數據中的任何位置,一種更可靠但更勞動密集的方法即可使用classdata選項,例如,

data myclassdata; 
    do SEX = 'M','F'; 
    do AGE = 13 to 17; 
     output; 
    end; 
    end; 
run; 

proc summary nway data = sashelp.class classdata=myclassdata exclusive; 
class sex age; 
var weight; 
output out = mysummary2 mean=; 
run; 

這裏的exclusive選項將輸出限制到存在於所述數據集classdata電平的組​​合。如果沒有它,您至少會得到classdata中指定的那些行,並根據觀察到的單向值爲所有可能的組合添加行,就像您指定了completetypes一樣。

+0

我需要最後一個方法(對於他們從未真正出現在我的數據中的地方)。但是,在開始時,用戶可以定義宏觀變量(例如%讓ReportBasis = Year,然後流過代碼的其餘部分以防止手動更改代碼),以確定他們是希望按月還是按年或四分之一。這些宏變量因此會根據所選內容改變表格的佈局。第二個選項可以適應更多的動態嗎? – user43080

+0

宏觀變量在proc概要中似乎不起作用。目前它只是一個proc sql,它從大表中選擇變量(其中一些是宏),然後對它們進行分組。 – user43080

+0

如果使用正確,宏變量可用於生成您喜歡的任何代碼。如果你想要求幫助,請發佈一個單獨的問題,並提供一個完整的可重現的例子你的proc摘要代碼。 – user667489