SAS编程与数据分析

在数据分析领域,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和交易金额。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485