datamart

1、取上周日日期和rolling12月的日期:
data timing;
format date1 yymmdd10. date2 yymmdd10.;
date2=intnx('week',today(),0);/上周末,数据截止日/
if mod(year(date2),4)=0 then do;
if (month(date2)100+day(date2))>228 then date1=date2-365;
else date1=date2-364;
end;
else if mod(year(date2)-1,4)=0 then do;
if month(date2)>2 then date1=date2-364;
else date1=date2-365;
end;
else date1=date2-364;/闰年,平年往前R12的date1计算/
month=year(date2)10000+month(date2)100+day(date2);/数据截止日*/
run;

2、转置:
PROC TRANSPOSE DATA=newcatbycnt out=newcatbycnt1(drop=NAME);
BY CustomerID; /列不变/
ID newcat; /newcat变为行/
VAR fag; /fag值/
run;

3、添加最后一笔往前rolling一年的日期oneyearago
data lastandfirst;
set lastandfirst;
format oneyearago yymmdd10.;
if month(lastpurchase) =2 and day(lastpurchase)=29 then do;
oneyearago=mdy(month(lastpurchase),day(lastpurchase)-1,
year(lastpurchase)-1)+1;
end;
else do;
oneyearago=mdy(month(lastpurchase),day(lastpurchase),
year(lastpurchase)-1)+1;
end;
run; /添加最后一笔往前rolling一年的日期oneyearago/

proc sort data=trans;by customer_id;run;
proc sort data=lastandfirst;by customer_id;run;

data trans;
merge trans(in=a) lastandfirst;
by customer_id;
if a;
oneyear=0;
if oneyearago<=purchasetime<=lasttime then oneyear=1;
run;

/************************************************************************/
4、/*********计算最后一笔往前rolling一年的av am af ipt************/

%macro rfm(input,timevar,output);
proc sql;
create table a1 as
select customer_id,purchasetime,sum(price) as salesbyday,sum(unit) as ui
from &input where &timevar=1 group by 1,2 having sum(price) ne 0;
quit;
proc sort data=a1;by customer_id purchasetime;run;

data &output(keep=customer_id av am af ipt);
set a1;
by customer_id;
if first.customer_id then do;
f=0;
v=0;
u=0;
end;
if salesbyday>0 then q=1;
else q=-1;
f+q;
v+salesbyday;
u+ui;
if last.customer_id then do;
if f=0 and v>0 then f=1;
if f ne 0 then do;
m=v/f;
ipt=u/f;
end;
av=v;
am=m;
af=f;
if f>0 then output;
end;
run;
%mend;

%rfm(trans,oneyear,rfm_1year);
/************************************************************************/

5、导出CSV:
proc export data=result
outfile='D:\Lancome_ec\报表\sampler.csv' dbms=csv replace;
run;
6、导入CSV:
%macro importcsv(dataset,path);
proc import datafile=&path out=&dataset;run;
%mend;
%importcsv(dataset=listwave,path="D:\Lancome_ec\报表\listwave.csv");
7、导入excel:
PROC IMPORT OUT= WORK.recommend_rule
DATAFILE= "E:\EC\kie\ff-test\recommend_rule.xlsx"
DBMS=EXCEL REPLACE;
SHEET="Sheet1$";
GETNAMES=YES;
RUN;
8、导出excel:
PROC EXPORT DATA=&input
OUTFILE= "E:\EC\kie\ff-test\result&output..xls"
DBMS=EXCEL REPLACE label;
SHEET="sheet1";
RUN;
9、/**************************excel多表导出*****************************/
方法1:
%macro report(input,output);
PROC EXPORT DATA=&input
OUTFILE= "E:\EC\kie\ff-test\定期项目\TMALL先试后买\Review\review&EC_date..xlsx"
DBMS=EXCEL REPLACE label;
SHEET="&output.";
RUN;

%mend;

%report(S2p_p2,先试后买推荐结果);
%report(P2p_p2,正装推荐结果);
%report(Productnum,正装回购人数);
%report(Samplenum,先试后买回购人数);
%report(p_time,正装回购参考日期);
%report(s_time,先试后买回购参考日期);

方法2:
libname xlout excel "E:\EC\kie\ff-test\定期项目\TMALL先试后买\Review\review&EC_date..xlsx";
proc datasets lib=xlout kill;run;
data xlout.先试后买推荐结果;set S2p_p2;run;
data xlout.正装推荐结果;set P2p_p2;run;
data xlout.正装回购人数;set Productnum;run;
data xlout.先试后买回购人数;set Samplenum;run;
data xlout.正装回购参考日期;set p_time;run;
data xlout.先试后买回购参考日期;set s_time;run;

libname xlout clear;
/***********************************************************************/

10、SAS 中可以利用PROC suveryselect 过程实现各种抽样
其一般形式是:
PROC SURVEYSELECT
data=<源数据集名>
method = <srs l urs l sys >
out=<抽取样本存放的数据集>
n=<抽取数量>(or samprate=抽样比例)
seed =n;
strata <指定分层变量>;
id <指定抽取的样本所保留的源数据集变量>;
run;
说明:method用来指定随机抽样方法的,其中SRS是指不放回简单随机抽样(Simple Random Samping);urs是指放回简单随机抽样(Unrestricted Random Sampling);sys是指系统抽样(Systematic Sampling)。
seed用来指定随机种子数,为非负整数,取0则每次抽取的样本不同,若取大于0的整数,则下次抽样时若输入相同值即可得到相同的样本;
id是指定从源数据集复制到样本数据集的变量,若缺省,则复制所有变量。
例子:
a、简单无重复随机抽样举例:
/按30%的比例从test数据集中抽取样本,并把样本输出到results数据集中/
proc surveyselect data=test1 out=results1 method=srs samprate=0.3;
run;
b、分层等比例随机抽样举例;
proc sort data=test2;
by 分层变量;
run; /先用分层变量对总体样本进行排序/
proc surveyselect data=test2 out=results2 method=srs samprate=0.1;
strata 分层变量;
run; /根据分层变量等比例从总体中抽取样本/
c、分层不等比例抽样举例;
(1)手工设置抽样比例或者抽样数
proc sort data=test3;
by 分层变量;
run; /先用分层变量对总体样本进行排序/
proc surveyselect data=test3 out=results3 method=srs
samprate=(0.1,0.3,0.5,0.2); /根据分层情况设置每一层要抽取的比例/
strata 分层变量;
run; /根据分层变量不等比例从总体中抽取样本/
proc surveyselect data=test3 out=results3 method=srs
n=(30,20,50,40); /根据分层情况设置每一层要抽取的样本数/
strata 分层变量;
run;
(2)根据抽样表进行不等比例抽样
proc sort data=test3;
by 分层变量;
run; /先用分层变量对总体样本进行排序/
proc surveyselect data=test3 out=results3 method=SRS
samprate=samp_table; /通过抽样比例数据集进行抽样,samp_table数据集中要包括分层变量 以及每一分层对应的抽样比例或者数量,如果按比例抽样变量必须用rate来命名抽样比例,如果是按数量抽样必须用nsize来命名抽样数量/
strata 分层变量;
run;

11、输出由freq出的类别的频数和百分比构成的表
ods csv file="G:\EC\KIE\online datamart&date\datamart_对比.csv";
/输出datamart_对比表,总表中control和test包括以下6个量/
proc freq data=t_test;table cluster;run;
proc freq data=c_control;table cluster;run;
proc freq data=t_test;table auscat;run;
proc freq data=c_control;table auscat;run;
proc freq data=t_test;table Frequency_online;run;
proc freq data=c_control;table Frequency_online;run;
ods csv close;
12.官网datamart字段
最后一笔往前rolling一年时间段:
Frequency_online 、AnnualSpending_online 、AUS_online 、ipt_online
数据截止日期往前rolling一年时间段:
Frequency_online_r12 、AnnualSpending_online_r12 、ipt_r12 am=AUS_online_r12

status字段中:
new_r12:首笔购买在数据截止日到往前rolling一年的时间内;
newrepeat_r12:首笔购买在数据截止日到往前rolling一年的时间内,并且次数>1;
Winback_R12:最后一笔购买在数据截止日到往前rolling一年的时间内,并且最后一笔距离倒数第二笔超过365天;
Existing_r12:数据截止日期往前rolling一年时间段内有购买、早于数据截止日期往前rolling一年有过购买,并且不是Winback_R12的人;
Winback_YTD:最后一笔在今年购买,第一笔在去年之前,并且去年没有购买过;
new_ytd:第一笔购买在今年;
Existing_YTD:去年线上购买过,今年线上又购买;
Active:最后一笔距离数据截止日的时间在360天以内;sleeping:最后一笔距离数据截止日的时间在361天到720天之间;
Lost:最后一笔距离数据截止日的时间在721天到1080天之间;
Lapsed:最后一笔距离数据截止日的时间超过1081天;

cluster字段:
cluster:最后一笔往前rolling一年的人购买产品类别的cluster;
cluster_all:数据截止日往前rolling一年的人购买产品类别的cluster;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • 处理日期的常见情景 NSDate -> String & String -> NSDate 日期比较 日期计算(基...
    KAKA_move阅读 795评论 0 0
  • 日期的处理在大大小小的iOS项目中都十分常见,随着Swift3.0正式版的即将推出,语法的改变让NSDate以及相...
    鱼与愚七阅读 756评论 0 0
  • 如何配置一个多页应用webpack工程化模板? webpack的四个核心概念: entry 入口:从哪里开始 ou...
    leyou319阅读 3,440评论 0 3
  • 很喜欢九月,即使现在离开了学校,再也没有”开学“这个动作。但九月仍然代表了一种跃跃欲试的可能性,代表了一种全新的开...
    伊心同学阅读 701评论 2 15
  • 忽然之间 终于明白 怕的不是你不爱我 而是我不再爱你 怕辜负星光的见证 怕忘记最初的感动 怕遗失满怀爱的初见 怕失...
    烟之阅读 175评论 0 1