楼主: jg.sas
421 3

[问答] proc report输出速度与数据集大小有关还是和实际内容的大小有关 [推广有奖]

  • 1关注
  • 1粉丝

等待验证会员

博士生

39%

还不是VIP/贵宾

-

威望
0
论坛币
208 个
通用积分
0.8998
学术水平
9 点
热心指数
10 点
信用等级
9 点
经验
4016 点
帖子
169
精华
0
在线时间
404 小时
注册时间
2018-12-24
最后登录
2024-4-26

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
proc report输出速度与数据集大小有关还是和实际内容的大小有关
rave系统的lab数据集比较大,将长度改为自适应长度后,proc report的速度有变化么
二维码

扫码加我 拉你入群

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

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

关键词:proc report Report repor repo Port

回帖推荐

whymath 发表于3楼  查看完整内容

运行该程序,结果如下: 对比 test1 与 test2 ,可知变量的内容不变时,变量长度变化了3个量级,对运行耗时的影响也很小。 对比 test1 与 test3 ,可知变量的内容增大3个量级时,运行耗时有所增长,但增长不到一倍。 对比 test1 与 test4 ,可知观测的数量增大1个量级时,运行耗时几乎也增大了一个量级。
归海刀刀
沙发
whymath 发表于 2023-4-7 14:53:49 |只看作者 |坛友微信交流群
我编写程序进行了验证,认为应该是与实际内容有关,与数据集的大小关系不大,并且,观测数变化一个量级带来的影响,要比变量实际长度变化一个量级带来的影响大得多。

我的程序如下:
  1. /*
  2. 生成样本数据
  3. test1: 10万条观测, 1个长度为4的变量, 该变量填满了值;
  4. test2: 10万条观测, 1个长度为4000的变量, 该变量仅有前4个字节填了值;
  5. test3: 10万条观测, 1个长度为4000的变量, 该变量填满了值;
  6. test4: 100万条观测, 1个长度为4的变量, 该变量填满了值;
  7. */
  8. data test1(keep=text1) test2(keep=text2) test3(keep=text3) test4(keep=text4);
  9.   length text1 text4 $4. text2 text3 $4000.;
  10.   do i=1 to 100000;
  11.     text1='ABCD';
  12.     text2='ABCD';
  13.     text3=repeat('ABCD',999);
  14.     output test1 test2 test3;
  15.   end;
  16.   do i=1 to 1000000;
  17.     text4='ABCD';
  18.     output test4;
  19.   end;
  20. run;

  21. *一个用于计算程序运行耗时的宏;
  22. %macro run_time(prog,reps=10);
  23. option nonotes;
  24. %local st_time end_time dif_time_lst;

  25. %do _i_=1 %to &reps.;
  26.   %let st_time=%sysfunc(datetime());
  27.   %unquote(&prog.);
  28.   %let end_time=%sysfunc(datetime());
  29.   %let dif_time&_i_.=%sysevalf(&end_time.-&st_time.);
  30. %end;

  31. %let dif_time_lst=&dif_time1.;
  32. %do _i_=2 %to &reps.;
  33.   %let dif_time_lst=&dif_time_lst.,&&dif_time&_i_.;
  34. %end;

  35. option notes;
  36. %put NOTE: Time Used(sec):;
  37. %put NOTE-Median: %sysfunc(median(&dif_time_lst.),8.3);
  38. %put NOTE-Mean: %sysfunc(mean(&dif_time_lst.),8.3);
  39. %put NOTE-Min: %sysfunc(min(&dif_time_lst.),8.3);
  40. %put NOTE-Max: %sysfunc(max(&dif_time_lst.),8.3);
  41. %mend;

  42. *调用宏以计算proc report在不同测试数据集上的时间消耗;
  43. ods noresults;
  44. %run_time(%nrstr(proc report data=test1;run;));
  45. %run_time(%nrstr(proc report data=test2;run;));
  46. %run_time(%nrstr(proc report data=test3;run;));
  47. %run_time(%nrstr(proc report data=test4;run;));
复制代码

使用道具

藤椅
whymath 发表于 2023-4-7 15:02:44 |只看作者 |坛友微信交流群
运行该程序,结果如下:
  1. %run_time(%nrstr(proc report data=test1;run;));
  2. NOTE: Time Used(sec):
  3.      Median:    1.837
  4.      Mean:    1.814
  5.      Min:    1.476
  6.      Max:    2.126

  7. %run_time(%nrstr(proc report data=test2;run;));
  8. NOTE: Time Used(sec):
  9.      Median:    2.037
  10.      Mean:    2.172
  11.      Min:    2.014
  12.      Max:    2.820

  13. %run_time(%nrstr(proc report data=test3;run;));
  14. NOTE: Time Used(sec):
  15. Median:    3.428
  16.      Mean:    3.455
  17.      Min:    3.342
  18.      Max:    3.692

  19. %run_time(%nrstr(proc report data=test4;run;));
  20. NOTE: Time Used(sec):
  21.      Median:   17.927
  22.      Mean:   17.983
  23.      Min:   15.904
  24.      Max:   20.924
复制代码

对比 test1 与 test2 ,可知变量的内容不变时,变量长度变化了3个量级,对运行耗时的影响也很小。
对比 test1 与 test3 ,可知变量的内容增大3个量级时,运行耗时有所增长,但增长不到一倍。
对比 test1 与 test4 ,可知观测的数量增大1个量级时,运行耗时几乎也增大了一个量级。

使用道具

板凳
whymath 发表于 2023-4-7 15:10:45 |只看作者 |坛友微信交流群
我是用 Win11 64 位计算机进行测试,SAS 版本是 SAS 9.4 M8.
以上测试还比较简陋,仅供参考。

使用道具

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

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

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

GMT+8, 2024-4-28 05:23