楼主: limuqi
7984 9

[原创博文] sas 运行速度 问题 [推广有奖]

  • 1关注
  • 2粉丝

本科生

27%

还不是VIP/贵宾

-

威望
0
论坛币
464 个
通用积分
0.0600
学术水平
2 点
热心指数
2 点
信用等级
2 点
经验
838 点
帖子
57
精华
0
在线时间
54 小时
注册时间
2011-8-2
最后登录
2016-1-5

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我编了一个sas程序,一个loop 差不多有4600 个iteration。运行差不多5,6 分钟。(单独测试结果)
然后我一次运行运行八个loop,一个loop完成继续做下一个loop,差不多一个多小时。
但之后就变的很慢。
这个时候iteration 非常慢,一开始是1秒4个以上iteration, 之后一秒一个iteration都不到。

我单独测试,一次运行10个loop 要2个多小时。

还是单独测试,一次运行141个loop, 运行了18个小时才做到第30个loop;

我想问这是什么问题。

循环loop 我都是写好的 %do n= 1 %to 8; (八个循环)  %do n= 1 %to 141(141个循环这样)

loop里的语句 大多数是 sql create table, sql updata, proc reg 这些。
每100个iteration 清除output and log.

我电脑配置 sas 9.2
computer.PNG

我很疑惑,为什么iteration速度会差这么多,我单独做速度还是很快的,一个5,6 分钟。
这和我电脑有关系么, 谢谢。

或者sas有没有parallel computing,谢谢
二维码

扫码加我 拉你入群

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

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

关键词:iteration computing Parallel Paralle ration 测试结果 白山 程序 礼盒 特产

沙发
kuhasu 发表于 2011-8-19 01:11:23 |只看作者 |坛友微信交流群
代码不贴,跟没说一样。

使用道具

藤椅
limuqi 发表于 2011-8-19 07:19:34 |只看作者 |坛友微信交流群
代码太长,我自己都没心情一次看完。
我去掉了一点不重要的贴上来,希望大牛们有空时能看看。

error_find.txt (2.72 KB)

我刚实验了一下,run完8次后,运行其他的程序,sas也变慢了,估计可能是内存分配的关系,有没有清除内存,以及整个library的语句(delete 整个work_lib,就不用一个一个写table名了 )

使用道具

板凳
limuqi 发表于 2011-8-19 07:22:56 |只看作者 |坛友微信交流群
kuhasu 发表于 2011-8-19 01:11
代码不贴,跟没说一样。
%do num = 71 %to 80 是主循环变量,

我有变量F1-F141, 所以就用F&num来做循环

使用道具

报纸
bobguy 发表于 2011-8-20 11:32:04 |只看作者 |坛友微信交流群
I believe that you abuse SAS macro. Learning macro only after you feel that you are really good at SAS base. Otherwise the macro may generate very inefficient sas programs.

使用道具

地板
sxlion 发表于 2011-8-21 12:21:15 |只看作者 |坛友微信交流群
机器不错啊 !

还好,代码不长。  果然是被宏嵌套套死了,哈哈。

这宏一看,立马凌乱了。

使用道具

7
limuqi 发表于 2011-8-22 03:05:55 |只看作者 |坛友微信交流群
sxlion 发表于 2011-8-21 12:21
机器不错啊 !

还好,代码不长。  果然是被宏嵌套套死了,哈哈。
sas学艺不精阿,循环套用不太会用,慢慢学吧。。。

使用道具

8
tj0412ymy 发表于 2011-8-22 15:50:57 |只看作者 |坛友微信交流群
看了一下代码,给LZ提一些建议,如果数据集较大,能尽量在DATA步做的工作,就避免在SQL里操作;另外,强制一些Proc步的结果不要输出显示;此外,值得注意的是对没有排序的较大数据集进行MERGE,会耗费大量的时间,如果两个数据集有共同的变量,不妨先排序,然后通过MATCH进行MERGE,从而提高运行速度。
对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

使用道具

9
一个大苹果 发表于 2012-3-30 16:36:55 |只看作者 |坛友微信交流群
bobguy 发表于 2011-8-20 11:32
I believe that you abuse SAS macro. Learning macro only after you feel that you are really good at S ...
向您请教,我在也感觉宏程序要比单独手工运行慢,这是必然的吗?

使用道具

10
bobguy 发表于 2012-3-31 07:22:41 |只看作者 |坛友微信交流群
一个大苹果 发表于 2012-3-30 16:36
向您请教,我在也感觉宏程序要比单独手工运行慢,这是必然的吗?
I read your programs. There are many places you can improve upon. It seems you have many unnecessary steps. The strategy many be wrong.

The SAS macro generates SAS codes fast enough. I never see any one complaints about SAS macro being slow.

It seems you have total 10*92*24 regressions. I try to reproduce what you do according to your programs. I don't know what is the size of your problem. I run obs=30 and 300 with total obs=22080*(30 and 300) and two variables.

You can see the log below.  Total of 10*92*24=22080 regression finishes with 4 seconds with 30 obs in each regression and less than 13 seconds for a 10 times problem.



44   data t1;
45
46      do group=1 to 10*92*24;
47         do j=1 to 30;
48            x1=rannor(123);x2=rannor(123);
49            y=1+1*x1+1*x2+rannor(123);
50            output;
51         end;
52       end;
53   run;

NOTE: The data set WORK.T1 has 662400 observations and 5 variables.
NOTE: DATA statement used (Total process time):
      real time           1.03 seconds
      cpu time            0.40 seconds


54
55   proc reg data=t1 outest=parms noprint;
56     by group;
57     model y=x1 x2;
58     output out=out p=py;
59   quit;

NOTE: The data set WORK.PARMS has 22080 observations and 9 variables.
NOTE: The data set WORK.OUT has 662400 observations and 6 variables.
NOTE: PROCEDURE REG used (Total process time):
      real time           3.62 seconds
      cpu time            3.12 seconds

64   data t1;
65
66      do group=1 to 10*92*24;
67         do j=1 to 300;
68            x1=rannor(123);x2=rannor(123);
69            y=1+1*x1+1*x2+rannor(123);
70            output;
71         end;
72       end;
73   run;

NOTE: The data set WORK.T1 has 6624000 observations and 5 variables.
NOTE: DATA statement used (Total process time):
      real time           3.95 seconds
      cpu time            2.46 seconds


74
75   proc reg data=t1 outest=parms noprint;
76     by group;
77     model y=x1 x2;
78     output out=out p=py;
79   quit;

NOTE: The data set WORK.PARMS has 22080 observations and 9 variables.
NOTE: The data set WORK.OUT has 6624000 observations and 6 variables.
NOTE: PROCEDURE REG used (Total process time):
      real time           15.17 seconds
      cpu time            12.19 seconds





使用道具

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

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

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

GMT+8, 2024-4-28 01:03