首页 > 解决方案 > SAS按组计数唯一观察

问题描述

我想弄清楚有多少客户从某家商店购买了他们的产品。每个 prod_id 的问题最多可以为每个客户提供 12 周的数据。我已经尝试了许多代码,有些代码将每个客户的所有观察结果加起来,而像下面的其他代码则删除了除最后一个观察结果之外的所有观察结果。

proc sort data= have; BY Prod_ID cust; run;
Data want;
Set have;
by Prod_Id cust;
if (last.Prod_Id and last.cust);
    count= +1;
run;

数据有

prod_id cust week  store
1       A    7/29  ABC
1       A    8/5   ABC
1       A    8/12  ABC
1       A    8/19  ABC
1       B    7/29  ABC
1       B    8/5   ABC
1       B    8/12  ABC
1       B    8/19  ABC
1       B    8/26  ABC
1       C    7/29  XYZ
1       C    8/5   XYZ
1       F    7/29  XYZ
1       F    8/5   XYZ   
2       A    7/29  ABC
2       A    8/5   ABC
2       A    8/12  ABC
2       A    8/19  ABC
2       C    7/29  EFG
2       C    8/5   EFG
2       C    8/12  EFG
2       C    8/19  EFG
2       C    8/26  EFG

我希望它看起来像什么

prod_id store count
1       ABC    2
1       XYZ    2
2       ABC    1
2       EFG    2

标签: if-statementcountsas

解决方案


首先,阅读if-statement。我刚刚编辑了您的代码以使其工作:

proc sort data=have; 
   by prod_id store cust; 
run;

data want(drop=cust week);
   set have;
   retain count;
   by prod_id store cust;
   if (last.cust) then count=count+1;
   else if (first.prod_id or first.store) then count = 0;
   if (last.prod_id or last.store) then output;
run;

如果您有问题,请提出。


推荐阅读