在数据分析领域,SAS语言是不可忽视的。SAS的不同软件被广泛应用于数据处理。其中,SAS Enterprise Guide和Base SAS是最常见的两种工具。这两种工具在格式和使用上非常相似,唯一的区别在于SAS Enterprise Guide是Base SAS的图形用户界面。SAS Enterprise Guide因其易用性和模块化特性而被广泛使用。随着时间的推移,Base SAS在行业中的重要性逐渐减弱,SAS Enterprise Guide正在取代Base SAS。然而,在使用过两者之后,更倾向于使用Base SAS来处理数亿客户和数万亿交易的数据。
前一篇文章()涵盖了SAS面试中的一些棘手问题。本文将讨论一些使用Base SAS比使用SAS Enterprise Guide更简单的棘手场景。这些问题比文章系列的第一部分中涵盖的问题更具挑战性和复杂性。这些问题在拥有广泛分析基础并处理大数据的公司中被广泛询问(数百万客户,数十亿交易,数万亿美元价值的交易)。
首先,来看一下使用Base SAS和SAS Enterprise Guide的优点,这将使更加欣赏那些棘手的场景。
SAS Enterprise Guide的优点: 1. 在拥有较小分析团队的公司中,EG更为常见。这是因为对于新加入公司的员工来说,EG上的程序更容易理解。鉴于分析行业的高流失率,这些公司使用SAS Enterprise Guide而不是Base SAS来规避风险是非常重要的。 2. 在EG上开发特定传统流程比在Base SAS上更快。 3. 使用EG更容易理解流程。
Base SAS的优点: 1. 如果代码逻辑非常复杂,使用Base SAS编码更容易。 2. 与EG相比,Base SAS的速度更快。 3. 修改Base SAS上的代码比在EG上更容易。 4. 使用宏使Base SAS编码比SAS EG更容易。
在零售行业工作。最近为客户启动了一个忠诚度计划。一项针对零售银行的研究表明,第三月(T+2月)总购买额达到1000美元的客户最终将购买超过30000美元。希望将忠诚度活动集中在这些客户上。
有两个数据集。第一个包含所有客户ID及其首次购买日期。第二个数据集包含客户ID及其每月购买额。首次购买可能是非金融交易,可能不是表2的一部分。
需要识别在首次购买后的第三个月购买额超过1000美元的客户。
%macro fetch_data(next_mon = , third_mon =);
data create_list;
set table_1;
if first_pur < next_mon;
run;
proc sort data = create_list out=list; by customer_id; run;
proc sort data = table_2 out=purchase; by customer_id; run;
data fetch_purchase;
merge list(in=a) purchase(in=b);
if yearmonth = third_mon;
by customer_id;
if a;
run;
proc datasets;
append base=final_dataset data = fetch_purchase force;
run;
%mend fetch_data;
%fetch_data(next_mon = '01Feb2012'd, third_mon = 201204);
%fetch_data(next_mon = '01Feb2013'd, third_mon = 201304);
%fetch_data(next_mon = '01Mar2012'd, third_mon = 201205);
%fetch_data(next_mon = '01Mar2013'd, third_mon = 201305);
*Identifying the customers with purchase above $1000 in 3rd month
data shortlisted;
set final_dataset;
if sales ge 1000;
run;
在银行业工作。想要分析交易数据集,并希望找到每个客户的中位数交易金额。这是希望向客户支付的金额,以扩大交易额。交易的美元价值越高,交易的总成本就越便宜。需要制作一个包含所有客户及其向下取整的中位数交易金额的列表(如果有5笔交易,希望得到第二低的交易额,而不是第三低的,如果交易只有1笔,则从列表中移除该客户)。
拥有的唯一数据集在交易ID上是唯一的。它还包含客户ID和交易金额。