2014-06-26 51 views
0

我試圖過濾一些記錄,並基於幾個字段做聚合。我知道總結函數不能用在where子句中。任何人都可以用一個小竅門來幫助我得到我的慾望結果。根據特定日期的最小條目過濾記錄

請在下面找到更多細節。

orderno訂購日期billdate經銷商SKU SOF差異demandqty/N

1  18.6.14  18.6.14 113999 11131280 8001 0 100 /n 

5  18.6.14  18.6.14 113999 11131280 8001 0 50 /n 

5  18.6.14  19.6.14 113999 11131280 8001 1 50 /n 

7  18.6.14  19.6.14 113999 11131280 8001 1 60 /n 

7  18.6.14  20.6.14 113999 11131280 8001 2 60 /n 

8  18.6.14  19.6.14 113999 11131280 8001 1 75 /n 

8  18.6.14  20.6.14 113999 11131280 8001 2 75 /n 

這裏是一個特殊訂單日期,SOF,SKU組合,我想獲得的總需求數量僅考慮各自的第一條記錄。

例如,

日期:18/6/2014 SKU 11131280 SOF 8001希望的需求(100+50+60+75=285)而diff分別是(0,0,1,1)即最小爲訂單1,5,7,8

回答

0

如果我理解正確的話,你應該重新排序由相同的密鑰,但用nodupkey選項排序by date,sof,sku,dif,然後(或做datstep​​和if first.sku),然後用proc means總結。

0

我會先對數據集進行排序,然後使用數據步驟來計算總需求(使用FIRST自動變量只選擇第一個訂單號)。爲了全面測試代碼,我在源數據中添加了一些額外的行。

data have; 
input orderno orderdate :ddmmyy8. billdate :ddmmyy8. dealer sku sof diff demandqty; 
format orderdate billdate date9.; 
datalines; 
1  18.6.14  18.6.14 113999 11131280 8001 0 100 
5  18.6.14  18.6.14 113999 11131280 8001 0 50 
5  18.6.14  19.6.14 113999 11131280 8001 1 50 
7  18.6.14  19.6.14 113999 11131280 8001 1 60 
7  18.6.14  20.6.14 113999 11131280 8001 2 60 
8  18.6.14  19.6.14 113999 11131280 8001 1 75 
8  18.6.14  20.6.14 113999 11131280 8001 2 75 
1  18.6.14  18.6.14 114000 11131290 8002 0 10 
5  18.6.14  18.6.14 114000 11131290 8002 0 20 
1  19.6.14  18.6.14 114000 11131290 8002 0 70 
5  19.6.14  18.6.14 114000 11131290 8002 0 80 
; 
run; 

proc sort data=have; 
by orderdate sof sku orderno; 
run; 

data want (keep=orderdate sof sku tot_demand); 
set have; 
by orderdate sof sku orderno; 
if first.sku then tot_demand=0; 
if first.orderno then tot_demand+demandqty; 
if last.sku then output; 
run;