根据特定日期的条目最小值过滤记录

时间:2014-06-26 18:58:09

标签: sql sas

我试图过滤一些记录并根据几个字段进行聚合。我知道汇总函数不能用在where子句中。任何人都可以通过一个小技巧来帮助我获得我想要的结果。

请在下面找到更多详情。

orderno orderdate billdate经销商sku sof diff 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),其中差异为(0,0,1,1),对于订单1,5,7,8而言,差异最小。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您应该对by date,sof,sku,dif进行排序,然后使用相同的键再次排序,但使用nodupkey选项(或执行datstep by date,sof,skuif first.sku)然后求和使用proc means

答案 1 :(得分: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;