SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

楼主: shiyiming
打印 上一主题 下一主题

求助:两个数据集的搜寻比较

[复制链接]

0

主题

0

帖子

2

积分

新手上路

Rank: 1

积分
2
11#
发表于 2009-2-13 16:09:53 | 只看该作者

Re: 求助:两个数据集的搜寻比较

可不可以用proc format来实现呢?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
12#
 楼主| 发表于 2009-2-13 16:33:32 | 只看该作者

Re: 求助:两个数据集的搜寻比较

考虑过,但不知道SAS支持不支持几万条的FORMAT。而且每次用几万个条目的FORMAT来PUT的花费也不知道效率如何。
所以没这样写。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
13#
 楼主| 发表于 2009-2-13 16:51:55 | 只看该作者

Re: 求助:两个数据集的搜寻比较

根据imeon说的,要是没有意会错的话,format应该是可以的。

<!-- m --><a class="postlink" href="http://sasor.feoh.net/viewtopic.php?f=1&amp;t=629&amp;start=0&amp;st=0&amp;sk=t&amp;sd=a">http://sasor.feoh.net/viewtopic.php?f=1 ... &amp;sk=t&amp;sd=a</a><!-- m -->

哪位搞个format的代码出来欣赏下。 <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
14#
 楼主| 发表于 2009-2-13 17:53:59 | 只看该作者

Re: 求助:两个数据集的搜寻比较

之前也考虑过format,想来想去没弄出来,又觉得效率可能不高,所以...... <!-- s:shock: --><img src="{SMILIES_PATH}/icon_eek.gif" alt=":shock:" title="Shocked" /><!-- s:shock: -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
15#
 楼主| 发表于 2009-2-13 22:29:27 | 只看该作者

Re: 求助:两个数据集的搜寻比较

不会
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
16#
 楼主| 发表于 2009-2-14 20:20:20 | 只看该作者

Re: 求助:两个数据集的搜寻比较

对于数据集比较大的format也比较大,不过还是很不错,佩服....
<!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: --> 小弟在此谢过各位...... <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
17#
 楼主| 发表于 2009-2-14 20:36:39 | 只看该作者

Re: 求助:两个数据集的搜寻比较

给出测试结果好吗?
算上排序,比较下总的运行时间,还有给出你的硬件配置。各种方法(好像有4种解决的代码了)都有了,需要一点比较的结果。

ps:如果方便,请贴出来看看,谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
18#
 楼主| 发表于 2009-2-14 20:54:04 | 只看该作者

Re: 求助:两个数据集的搜寻比较

OK,等下附上
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
19#
 楼主| 发表于 2009-2-14 22:28:44 | 只看该作者

Re: 求助:两个数据集的搜寻比较

这个ahuige原版,sxlion改进的:

489
490  proc sort data=a;
491    by num1 num2;
492  run;

NOTE: There were 365462 observations read from the data set WORK.A.
NOTE: The data set WORK.A has 365462 observations and 3 variables.
NOTE: PROCEDURE SORT used:
      real time           8.65 seconds
      cpu time            0.79 seconds


493  proc sort data=b;
494    by num;
495  run;

NOTE: There were 111157 observations read from the data set WORK.B.
NOTE: The data set WORK.B has 111157 observations and 2 variables.
NOTE: PROCEDURE SORT used:
      real time           0.21 seconds
      cpu time            0.21 seconds


496
497  data ahuige(drop=num1 num2);
498    set b;
499    retain num1 num2 add;
500    do while (^(num1&lt;=num&lt;=num2) and (point+1&lt;=maxA)) ;
501      point+1;
502      set a point=point nobs=maxA;
503    end;
504    if num^=.;
505  run;

NOTE: There were 111157 observations read from the data set WORK.B.
NOTE: The data set WORK.AHUIGE has 111054 observations and 3 variables.
NOTE: DATA statement used:
      real time           1.78 seconds
      cpu time            0.32 seconds

这个是徐福贵兄的,生成的formats 28.5M

538  data xxx/view=xxx;
539     fmtname = 'tianwild';
540     do until(eof);
541        set a(keep=num1 num2 add rename=(num1=start num2=end add=label)) end=eof;

542        output;
543     end;
544     hlo = 'o';
545     label = '';
546     output;
547     stop;

NOTE: DATA STEP view saved on file WORK.XXX.
NOTE: A stored DATA STEP view cannot run under a different operating system.
NOTE: DATA statement used:
      real time           0.00 seconds
      cpu time            0.00 seconds


548  proc format cntlin=xxx;
NOTE: Format TIANWILD has been output.

NOTE: View WORK.XXX.VIEW used:
      real time           5.07 seconds
      cpu time            0.14 seconds

NOTE: There were 365462 observations read from the data set WORK.A.
NOTE: There were 365463 observations read from the data set WORK.XXX.
NOTE: PROCEDURE FORMAT used:
      real time           5.09 seconds
      cpu time            2.21 seconds


549  data c;
550     set b;
551     city = put(num, tianwild.);
552     if city ne '';
553  run;

NOTE: There were 111157 observations read from the data set WORK.B.
NOTE: The data set WORK.C has 111054 observations and 3 variables.
NOTE: DATA statement used:
      real time           0.71 seconds
      cpu time            0.71 seconds

[quote=&quot;sxlion&quot;:1us8krd3]如果不排序:
...
如果前面的排好序:
...
如果不计排序时间的话,代码2效率高。
[/quote:1us8krd3]
其余这两个的效率不太高,跑了8分钟左右我中止了,没跑完。

第一个
real time:8.65+0.21+1.78=10.64 seconds  
CPU time:0.79+0.21+0.32=1.32 seconds

第二个
real time:0.00+5.09+0.71=5.80 seconds         
CPU time:0.00+2.21+0.71=2.92 seconds


备注:硬件配置 AMD TL-56(1.8G)+2G
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
20#
 楼主| 发表于 2009-2-14 22:57:47 | 只看该作者

Re: 求助:两个数据集的搜寻比较

数据说明一切。

ps:我的那个改进只是代码看上去简洁一点,对速率没有任何帮助。
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-5 10:29 , Processed in 0.192930 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表