我试图根据每个客户的交易时间来计算我的产品销售量。为了说明这一点,客户拥有三种类型的产品,例如计算机,打印机和键盘,如果此项目未标记为1,我想放一个计数器来显示过去12个月的销售订单(如果标记为1,我也有一个标记是否与广告系列一起出售)。这是我的数据的样子;
ID PRODUCT SALETIME CAMPAIGN_FLAG
100 Keyboard 201705 0
100 printer 201708 1
100 computer 201801 0
100 keyboard 201806 0
200 printer 201801 1
200 keyboard 201805 0
200 computer 201808 0
我想得到什么;
ID PRODUCT SALETIME CAMPAIGN_FLAG COUNT
100 Keyboard 201705 0 1
100 printer 201708 1 1
100 computer 201801 0 2
100 keyboard 201806 0 2
200 printer 201801 1 0
200 keyboard 201805 0 1
200 computer 201808 0 2
我尝试了很多事情,例如左连接表与同一表,而仅销售具有campaing = 0标志(我仅在右侧带了SALETIME列)。然后尝试在销售时间的前一年添加一列,并在销售时间在一年之前和现在之间放置一个标记Count_sum。然后我将Count_sum的总和按ID,产品,SALETIME分组。这实际上是可行的,但是如果客户在同一个月内有两种产品,我将无法处理,在这种情况下,我将失去柜台。例如:
ID PRODUCT SALETIME CAMPAIGN_FLAG COUNT
100 Keyboard 201705 0 1
100 printer 201708 1 1
100 computer 201801 0 3
100 keyboard 201801 0 3
200 printer 201801 1 0
200 keyboard 201805 0 2
200 computer 201805 0 2
我不知道如何解决此问题。如果您能提供帮助,我将不胜感激。
答案 0 :(得分:0)
实际上,您将按SALETIME和ID分组,例如
SELECT *, COUNT(*) AS COUNT FROM TABLE GROUP BY ID, SALETIME ORDER BY ID
但是,结果不会完全相同,因为我无法仅通过查看您的数据来得出标准;-)
答案 1 :(得分:0)
如果我对您的了解很好,那么您所寻找的只是您要为特定产品的第一个实例编号的每个ID。
请不要在数据线中或数据中使用键盘和键盘,如果您使用相同格式的数据,并且需要将其设置为单个值(如键盘或键盘两者都不是),则会导致问题
首先创建数据集
data have;
input ID PRODUCT $ SALETIME CAMPAIGN_FLAG;
datalines;
100 keyboard 201705 0
100 printer 201708 1
100 computer 201801 0
100 keyboard 201806 0
200 printer 201801 1
200 keyboard 201805 0
200 computer 201808 0
;
然后按ID和产品对数据进行排序,这是为了在后续步骤中使用逻辑,这样您就不必在相同的ID中再次计算相同的产品。
proc sort data=have out=have1 ;
by id product;
run;
data have2;
set have1 ;
by id product;
if first.product then num = 0;
else num=1;
run;
/ *,然后使用id和saletime * /
将其按原样归还数据proc sort data=have2 out=have3;
by id SALETIME;
run;
最终应用逻辑
data want(drop =num);
set have3;
by id;
if first.id then count=0;
if CAMPAIGN_FLAG = 0 and num = 0
then count+1;
run;
proc打印数据=想; 运行;