楼主: nancy911
1998 3

[原创博文] 不太会写宏,哪个高手能帮一下忙 [推广有奖]

  • 0关注
  • 0粉丝

大专生

73%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
901 点
帖子
50
精华
0
在线时间
58 小时
注册时间
2006-5-19
最后登录
2016-5-3

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
目的是rolling求12个月的两次购买以上人的占比,endtime这边要跑12次,太不智能呢,哪位高手能帮忙改改code,用宏表现一下,谢谢


%let Endtime='31jan2009'd;
data sales(KEEP=CUSTOMERID ID);
set sales1;
id=customerid||purchasetime||store;
if  &endtime-365<=purchasetime<=&endtime and customerid ne 'NULL';
run;
PROC SORT DATA=sales; BY ID; RUN;
DATA FREQ (KEEP=CUSTOMERID ID);
   SET sales;
   BY ID;
   IF LAST.ID;
RUN;
DATA FREQ ;
   SET FREQ;
   BY CUSTOMERID;
   IF FIRST.CUSTOMERID THEN DO;
       F=0;
   END;
   F+1;
   IF LAST.CUSTOMERID THEN OUTPUT;
RUN;
proc sql;
create table aa as select count (distinct(case when f>=2 then customerid else '1' end)),count( customerid),count (distinct(case when f>=2 then customerid else '1' end))/count( customerid) from FREQ;
quit;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Customer purchase rolling custom sales store count 智能

回帖推荐

soporaeternus 发表于2楼  查看完整内容

在流水和需要回滚观测的时间点不太大的前提下 SQL应该是一个挺不错的选择,算了目标客户和总量,没有算目标占比 -_-!!!当数据量巨大的话,可以用一个data步来搞定到客户每个时点的次数标记,再进行统计......

本帖被以下文库推荐

沙发
soporaeternus 发表于 2010-4-22 10:58:48 |只看作者 |坛友微信交流群
在流水和需要回滚观测的时间点不太大的前提下
SQL应该是一个挺不错的选择,算了目标客户和总量,没有算目标占比 -_-!!!
  1. data sales;
  2.         do customerid=10001 to 10050 by 1;
  3.                 do purchasetime='01jan2008'd to '31dec2009'd;
  4.                         if ranuni(0)<=0.002 then output;
  5.                 end;
  6.         end;
  7.         format purchasetime yymmdd10.;
  8. run;

  9. data date;
  10.         do i=1 to 12 by 1;
  11.                 date=intnx("MONTH","31Jan2009"d,i-1,"ENDING");
  12.                 output;
  13.         end;
  14.         drop i;
  15.         format date yymmdd10.;
  16. run;

  17. proc sql;
  18.         create table result as
  19.                 select
  20.                         date
  21.                         ,sum(case when cnt>=2 then 1 else 0 end) as cnt_target
  22.                         ,count(*) as cnt_all
  23.                 from
  24.                         (select
  25.                                 a.date
  26.                                 ,b.customerid
  27.                                 ,count(*) as cnt
  28.                                 from date a
  29.                                 left join sales b
  30.                                 on b.purchasetime between intnx("YEAR",a.date,-1,"SAMEDAY")+1 and a.date
  31.                                 group by a.date,b.customerid)
  32.                 group by date
  33.         ;
  34. quit;
复制代码
当数据量巨大的话,可以用一个data步来搞定到客户每个时点的次数标记,再进行统计......
已有 3 人评分经验 论坛币 学术水平 热心指数 收起 理由
bakoll + 3 + 3 精彩帖子
醉_清风 + 1 + 1 学习了
crackman + 1 + 1 不错

总评分: 经验 + 3  论坛币 + 3  学术水平 + 2  热心指数 + 2   查看全部评分

Let them be hard, but never unjust

使用道具

藤椅
nancy911 发表于 2010-4-22 11:23:36 |只看作者 |坛友微信交流群
你很牛,thanks

使用道具

板凳
crackman 发表于 2010-4-22 12:28:52 |只看作者 |坛友微信交流群
2# soporaeternus
哥们
写的不错

使用道具

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

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

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

GMT+8, 2024-5-18 05:09