如何提取某些记录并更新SAS中的数据



我有一张客户购买表。目的是能够在每个客户的最后20个购买中提取摘要统计信息,并随着每个新订单的进来而更新它们。做到这一点的最佳方法是什么?我需要为每个客户提供桌子吗?请记住,有500多个客户。谢谢。

这是在高级询问的,因此我将在该级别上回答。如果您需要更多详细的帮助,您需要提供更多详细的信息,并尝试自己解决问题。

在SAS中,您在大多数PROCS中提供了每个PROC或数据步骤以及CLASS语句中可用的BY语句。这两者都可以在全球低于全球的水平上进行数据分析有用。对于许多基本用途,它们给出了类似的结果,尽管并非在所有情况下;查找您使用的特定Proc来进行分析以获取更多详细信息。

大概,您将创建一个包含每个客户最新记录,甚至一个视图的表格(视图类似于表,除了未写入磁盘之外(,然后运行分析PROC BY您的客户ID多变的。如果将其设置为视图,则您甚至不必重新运行该部分 - 您可以创建一个永久的视图,指向您不断更新数据,并且每次运行分析Proc时,将发生最后20个记录的子集。

是的,您可以在现有表中添加等级,也可以为每个客户创建另一个包含最后20个购买的表。

我的建议是使用DataSetP每个客户选择TOP20购买者,然后进行摘要统计信息。我下面的代码将创建一个名为" Want"的表格,并具有排名前20个字段。

示例数据:

data have;
input id $ purchase_date amount;
informat purchase_date datetime19.;
format purchase_date datetime19.;
datalines;
cust01 21dec2017:12:12:30 234.57
cust01 23dec2017:12:12:30 2.88
cust01 24dec2017:12:12:30 4.99
cust02 21nov2017:12:12:30 34.5
cust02 23nov2017:12:12:30 12.6
cust02 24nov2017:12:12:30 14.01
;
run;

按ID和日期按降序排序数据:

proc sort data=have ; 
by id descending purchase_date ;
run;

选择顶部2:在您的情况下更改我的2至20

/*Top 2*/
%let top=2;
data want (where=(Rank ne .));
set have;
by id;
retain i;
/*reset counter for top */
if first.id then do;  i=1; end;
if i <= &top then do; Rank= &top+1-i; output; i=i+1;end;
drop i;
run;

输出:最后2个客户购买:

id=cust01 purchase_date=24DEC2017:12:12:30 amount=4.99 Rank=2 
id=cust01 purchase_date=23DEC2017:12:12:30 amount=2.88 Rank=1 
id=cust02 purchase_date=24NOV2017:12:12:30 amount=14.01 Rank=2 
id=cust02 purchase_date=23NOV2017:12:12:30 amount=12.6 Rank=1 

最新更新