楼主: bjpucl
10896 25

数据集观测条数几百万条,PROC SORT效率低、占用资源大,如何破? [推广有奖]

11
scarfacetony 发表于 2014-1-9 10:29:55 |只看作者 |坛友微信交流群
加内存条吧
看了这个视频,我于是有了进股市的信心!
https://bbs.pinggu.org/thread-2787427-1-1.html

使用道具

12
zhengbo8 发表于 2014-1-9 11:33:36 |只看作者 |坛友微信交流群
bjpucl 发表于 2014-1-9 10:07
昨天按照你的方法,在sort过程中增加了选项sortsize=600m、tagsort;同时还修改了sasv9.cfg中的sortsize( ...
这是拿时间来换空间。

使用道具

13
bjpucl 发表于 2014-1-9 13:07:06 |只看作者 |坛友微信交流群
zhengbo8 发表于 2014-1-9 11:33
这是拿时间来换空间。
嗯,暂时也没别的办法,主要这个东西以后可能要给被人使用,也不能跟人说“目前您可以休息了,请于20分钟后回来查看结果”。哈哈。。。

多谢诸位指教!

使用道具

14
jingju11 发表于 2014-1-9 13:37:17 |只看作者 |坛友微信交流群
bjpucl 发表于 2014-1-9 10:07
昨天按照你的方法,在sort过程中增加了选项sortsize=600m、tagsort;同时还修改了sasv9.cfg中的sortsize( ...
我在不同的情况之下,试过tagsort, 结果无一例外,都非常之慢。你的又是一个例子。
京剧

使用道具

15
rdsc2006 发表于 2014-1-9 22:29:59 |只看作者 |坛友微信交流群
大数据集拆分成若干小数据集,单独排序再汇总。

使用道具

16
soporaeternus 发表于 2014-1-10 11:18:05 |只看作者 |坛友微信交流群
jingju11 发表于 2014-1-9 13:37
我在不同的情况之下,试过tagsort, 结果无一例外,都非常之慢。你的又是一个例子。
京剧
毕竟tagsort多一次id与obs的匹配过程

类似于把char用format做成num,排序后再format一下

把一步的IO分散开来做
Let them be hard, but never unjust

使用道具

17
jingju11 发表于 2014-1-10 12:44:07 |只看作者 |坛友微信交流群
soporaeternus 发表于 2014-1-10 11:18
毕竟tagsort多一次id与obs的匹配过程

类似于把char用format做成num,排序后再format一下
说的不错。有一次同事问过我排序因为内存不足(1百万的记录50个变量)而失败的解决方法。我想用TAGSORT来解决。结果是,好像可以。但是我粗略的估计了以下,时间消耗大概是正常排序(如果可行) 的5到10倍,所以最后放弃了。因为该数据的字符变量比较多,最后尝试挤压(但不是COMPRESS)多余的字符长度,从而降低数据的尺寸。问题得以解决。其实针对字符变量较多的宽大数据而言,这种方法往往有效。比如以下某次分析时的积压的结果报告:数据尺寸降低74%。
但是并非没有例外,有一次挤压之后尺寸增长了0.05%。无法猜测原因。京剧
---(chg_length)-------------------------------------------------------------------
  - Data Set          : data.Physmedsall_c -> work.Physmedsall_c
  - File Size (byte)  : 000,088,507,392 -> 000,022,970,368 (decreased by 74.05%)
  - Summary of Changes of Character Variables:
      Variable Name                 Length Chg
      ---------------               ---------------
      ATC_CODE                      00255 -> 00007
      ATC_LEV1                      00255 -> 00050
      ATC_LEV2                      00255 -> 00050
      ATC_LEV3                      00255 -> 00050
      ATC_LEV4                      00255 -> 00050
      CDOSE                         00050 -> 00010
      CDSTART                       NO
      CDSTOP                        NO
      CMEDNAME                      00200 -> 00040
      DDSTART                       NO
      DDSTOP                        NO
      DMSTART                       00003 -> 00002
      DMSTOP                        00003 -> 00002
      DOSE                          00050 -> 00010
      DRUGc                         NO
      DYSTART                       NO
      DYSTOP                        NO
      MEDNAME                       00200 -> 00040
      NDSUNIT                       00010 -> 00002
      NFREQ                         NO
      NFREQPER                      NO
      NREASON                       NO
      NROUTE                        NO
      PATIENT                       00010 -> 00006
      PHYS_BASE                     00003 -> 00001
      PREFERRED_NAME                00255 -> 00052
      PT_ELIG                       00003 -> 00001
      condition                     NO
      ra_active                     00003 -> 00001
      route1                        NO
---(chg_length)-------------------------------------------------------------------

使用道具

18
注册吧 发表于 2014-7-22 16:17:00 |只看作者 |坛友微信交流群
是不是要加内存条。

使用道具

19
注册吧 发表于 2014-7-22 16:17:53 |只看作者 |坛友微信交流群
那么多数据,用EXCEL很方便?

使用道具

20
Tigflanker 发表于 2015-5-22 08:57:34 |只看作者 |坛友微信交流群
zhengbo8 发表于 2014-1-8 11:03
hash表,试试。
bo兄说的hash排序,能否说说思路呢?

我昨天也想了下这个问题,如果说把观测做逐个比较,可是怎么改变载入的顺序呢?

另外方法是建一张空表,一条一条的载入和比较;
还是全部排序变量载入,用hash循环调整呢?

我总是觉得hash做查找还行,做比较不知道咋操作。

使用道具

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

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

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

GMT+8, 2024-4-24 03:04