楼主: ertyuj
1217 3

一个非常现实的问题,悬赏实现SAS代码,求教! [推广有奖]

  • 0关注
  • 1粉丝

硕士生

40%

还不是VIP/贵宾

-

威望
0
论坛币
254 个
通用积分
0.7615
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
-351 点
帖子
136
精华
0
在线时间
164 小时
注册时间
2007-2-7
最后登录
2022-3-17

50论坛币
我有如下示意数据,一列是客户姓名,一列是交易日期,一列是订单号码,一列是该订单单号的状态(交易成功/交易失败)。一个客户可以一天提交多个订单。数据已经完全排序:按照客户名称,订单日期,和订单号码由新到老排序。我想用SAS加上两列:(1)在收到当前订单之前的30天内,该客户已经成功的次数(2) 在收到当前订单之前的30天内,该客户交易失败的次数。

姓名        日期                订单        状态
张天        5月4号        129        成功
张天        5月4号        128        失败
张天        5月4号        127        成功
张天        5月1号        126        成功
张天        5月1号        125        失败
张天        4月1号        124        成功
王玉        2月25号        123        失败
常发        1月31号        122        成功


举例说明我到底是要什么:
第一行,在收到129号订单之前的30天内,张天已经有2次成功(126号,127号)和2次失败(125号,128号)。
第二行,在收到128号订单之前的30天内,张天已经有2次成功(126号,127号)和1次失败(125号).


为简单起见,只列出了几行,实际的数据包括好多好多行啊。如果没有表述清楚,请尽可按照自己的理解来写SAS代码。多谢!!!!!

最佳答案

wwang111 查看完整内容

我把你的原始数据稍微改了一下,日期加上了年,要不然跨年的就没法计算了,我假定了这些日期都是2016年的,你看一下有什么问题: data test; input name : $15. date : mmddyy10. indent status $; format date yymmdd10.; cards; Zhangtian 05/04/2016 129 Success Zhangtian 05/04/2016 128 Fail Zhangtian 05/04/2016 127 Success Zhangtian ...
关键词:sas代码 订单号 交易日 数据包 易成功 姓名
数据科学和机器学习博客:https://shorturl.at/jtHTW
沙发
wwang111 发表于 2016-8-7 11:52:01 |只看作者 |坛友微信交流群
我把你的原始数据稍微改了一下,日期加上了年,要不然跨年的就没法计算了,我假定了这些日期都是2016年的,你看一下有什么问题:

data test;
input name : $15. date : mmddyy10. indent status $;
format date yymmdd10.;
cards;
Zhangtian        05/04/2016        129        Success
Zhangtian        05/04/2016        128        Fail
Zhangtian        05/04/2016        127        Success
Zhangtian        05/01/2016        126        Success
Zhangtian        05/01/2016        125        Fail
Zhangtian        04/01/2016        124        Success
Wangyu           02/25/2016        123        Fail
Changfa          01/31/2016        122        Success
;

data wanted;
set test;
su_time=0;
fa_time=0;
do i=1 to nobs;
  set test(rename=(name=_name date=_date indent=_indent status=_status)) nobs=nobs point=i;
  if name=_name and _date>=date-30 and indent>_indent then do;
   if _status="Success" then su_time+1;
   else if _status="Fail" then fa_time+1;
  end;
end;
drop _:;
run;

使用道具

藤椅
ertyuj 发表于 2016-8-7 12:50:47 |只看作者 |坛友微信交流群
这是一点背景资料:一个企业他有很多客户,如果有一个订单失败了,那么企业想看看,在收到这个订单之前的一个月内,这个客户下了多少订单,多少成功了,多少失败了,如果之前订单大多成功了,那么这个企业就会下大精力研究一下,为什们当前的这个订单竟会失败。注意,一个客户可能在一天内下多个单子,也可能在几个月都不下一个单子。

使用道具

板凳
dogmamongo 发表于 2016-8-7 16:10:12 |只看作者 |坛友微信交流群
proc sql可以处理

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-7 11:08