楼主: yz7891
2128 3

[问答] 如何在SAS实现log curve [推广有奖]

  • 0关注
  • 0粉丝

本科生

86%

还不是VIP/贵宾

-

威望
0
论坛币
18 个
通用积分
0
学术水平
0 点
热心指数
4 点
信用等级
0 点
经验
615 点
帖子
100
精华
0
在线时间
61 小时
注册时间
2010-3-30
最后登录
2019-6-3

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我有一个表,大概2000多万条数据,104个变量(week1 - week104) 。每行数据对应一个用户,每个变量是用户加入的第N个星期的销售额。

现在有个需求就是想要给每个用户算一条log curve并得到公式,我能想到的方法是取出一个用户的数据,进行转置。算出ln(1) 到 ln(104), 然后用log值跟销售增长率之间做regression.  但是现在用户太多了,一个一个转置并计算耗时太长,各位大神有没有什么好的办法可以实现的呢?

微信截图_20170112111935.png
二维码

扫码加我 拉你入群

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

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

关键词:curve Log regression regressio regress 如何

沙发
zwnSAS121 发表于 2017-1-12 19:31:21 |只看作者 |坛友微信交流群
我试了下,你这个计算量很大,所以我把do loop放大10。
  1. data sales;
  2. do user=1 to 10;
  3. output;
  4. array weeks(*) weeks1-weeks104;
  5. do i=1 to dim(weeks);
  6. weeks(i)=abs(100*rannor(0));
  7. end;
  8. end;
  9. drop i;
  10. run;
  11. /*不知道为什么第一个用户数据缺失,下面剔除缺失值*/
  12. data sales_1;
  13. set sales;
  14. if _N_=1 then delete;
  15. run;

  16. /*对数据进行转置*/
  17. proc transpose data=sales_1 out=log_sales;run;

  18. data log_curve;
  19. set log_sales;
  20. if _N_=1 then delete;/*删除第一条观测:无关的字符变量用户名*/
  21. run;

  22. /*添加数字week*/
  23. data log_curve;
  24. retain week log;
  25. set log_curve;
  26. week=_N_;
  27. log=log(week);
  28. run;

  29. %macro reg(start,end);
  30. %do i=&start %to &end;
  31. proc reg data=log_curve;
  32. model col&i.=log / b;
  33. plot log*col&i.;/*输出回归方程与R2*/
  34. run;
  35. %end;
  36. %mend reg;
  37. %reg(1,10)
复制代码


已有 1 人评分经验 热心指数 收起 理由
prince315 + 2 + 1 热心帮助其他会员

总评分: 经验 + 2  热心指数 + 1   查看全部评分

使用道具

藤椅
yz7891 发表于 2017-1-22 04:42:14 |只看作者 |坛友微信交流群
zwnSAS121 发表于 2017-1-12 19:31
我试了下,你这个计算量很大,所以我把do loop放大10。
谢谢! 抱歉没注意到您的回帖。我已经找到方法解决这个问题了,就是在做transpose和regression的时候都加by member id,这样就可以了。我拿了100多万个member做sample,测试下来跑一遍在五分钟左右,因为是用的服务器跑的,会比自己电脑上的SAS快一点

使用道具

板凳
prince315 在职认证  发表于 2017-1-22 10:01:14 |只看作者 |坛友微信交流群
zwnSAS121 发表于 2017-1-12 19:31
我试了下,你这个计算量很大,所以我把do loop放大10。
你这是因为在第一次循环时候,各种变量还没有开始衍生就已经output了,所以出错。只需要将output语句放在整个loop的最后即可。另外arrya的定义建议放在loop外。

使用道具

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

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

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

GMT+8, 2024-4-27 10:39