sas优化技巧(3)排序

1:防止不必要的排序

下面四种方式可以防止排序的进行

??1.1:BY-group processing with an index to avoid a sort

在以下情况下,by语句不会用索引

the BY statement includes the DESCENDING or NOTSORTED option or if SAS detects that the data file is physically stored in sorted order on the BY variables

索引列用来进行排序的利弊

弊:

?? 1:It is generally less efficient than sequentially reading a sorted data set because
processing BY groups typically means retrieving the entire file.
?? 2:It requires storage space for the index.

??1.2:BY-group processing with the NOTSORTED option/GROUPFORMAT option

by variable option;

The NOTSORTED option specifies that observations that have the same BY value are grouped together but are not necessarily sorted in alphabetical or numeric order.

The NOTSORTED option works best when observations that have the same BY value are stored together.

注意事项:

The NOTSORTED option turns off sequence checking. If your data is not grouped,using the NOTSORTED option can produce a large amount of output.

The NOTSORTED option cannot be used with the MERGE or UPDATE statements

Groupformat option

The GROUPFORMAT option uses the formatted values of a variable instead of the internal values to determine where a BY group begins and ends

意思就是用格式化后的变量值来进行分组,而不是用原来的数据集的值

by order_date groupformat notsorted;

??1.3:a CLASS statement

提前对变量进行排序对class语句几乎没有什么帮助,但是对by语句有很大的帮助

1.4: the SORTEDBY= data set option.

If you are working with input data that is already sorted, you can specify how the data is ordered by using the SORTEDBY= data set option.

Although the SORTEDBY= option does not sort a data set, it sets the value of the Sorted flag. It does not set the value of the Validated sort flag. (PROC SORT sets the Validated sort flag.)

data company.transactions (sortedby=invoice);invoice为排序好的列,这个选项表示这个列已被排好序。

排序对空间的要求

When data is sorted, SAS requires enough space in the data library for two copies ofthe data ?le that is being sorted as well as additional workspace,等于是原数据集*4的空间,这针对的是use disk space in order to sort the data

2:多线程排序

PROC SORT SAS-data-set-name THREADS | NOTHREADS;

进行多线程排序的策略

When a threaded sort is used, the observations in the input data set are divided intoequal temporary subsets, based on the number of processors that are allocated to theSORT procedure. Each subset is then sorted on a different processor. The sortedsubsets are then interleaved to re-create the sorted version of the input data set.

设置多余实际CPU数量会降低运行效率

CPUCOUNT= n | ACTUAL;

3:大数据集排序

对于大数据集的排序,如果空间不够可以分块进行

合并时,如果是用obs进行分割,则不能用append来合并

五种分割在advance上面看吧。。。。

用tagsort进行排序,不支持多线程

PROC SORT DATA=SAS-data-set-name TAGSORT;

原理:The TAGSORT option stores only the BY variables and the observation numbers in temporary files. The BY variables and the observation numbers are called tags. At the completion of the sorting process, PROC SORT uses the tags to retrieve records from the input data set in sorted order.

时间多,空间少,对比第一种

和正常排序比较,如果数据集序列混乱则用到的时间多很多,I/O也是

但是如果基本排好序,那么时间 I/O都只会多一点点

PROC SORT DATA=SAS-data-set-name TAGSORT;

The TAGSORT optionstores only the BY variables and the observation numbers in temporary ?les. The BYvariables and the observation numbers are called tags.At the completion of the sortingprocess, PROC SORT uses the tags to retrieve records from the input data set in sortedorder.

4:高效删除重复值

4.1:Using the NODUPKEY Option

PROC SORT compares all BY-variable values for each observation to those for the previous observation that was written to the output data set

PROC SORT DATA=SAS-data-set-name NODUPKEY;

4.2:Using the NODUPRECS /nodup Option

the NODUPRECS option compares all of the variable values for each observation to those for the previous observation that was written to the output data set.

PROC SORT DATA=SAS-data-set-name NODUPRECS;

Because NODUPRECS checks only consecutive observations, some nonconsecutive duplicate observations might remain in the output data set. You can remove allduplicates with this option by sorting on all variables.(这个选项只对连续的重复值有效,不连续的就不会消除)

4.3:Using the EQUALS | NOEQUALS Option

EQUALS maintains the order from the input data set in the output data set.NOEQUALS does not necessarily preserve this order in the output data set.NOEQUALS can save CPU time and memory resources.

这里要这样理解,对于这样两条数据

1 2

1 3

进行这样的程序 proc sort data=old out=new nodupkey equal/unequal; by ,..;run;

如果是equal那么会保留1 2

如果是unequal则会保留1 3

5:host sort utility

Host sort utilities are third-party sort packages that are available in some operating environments. In some cases, using a host sort utility with PROC SORT might be more efficient than using the SAS sort utility with PROC SORT.(是一个第三方包,对比特定数据集用起来效果会比proc sort好)

5.1:Using the SORTPGM= System Option

tells SAS whether to use the SAS sort, to use the host sort, or to determine which sort utility is best for the data set.

指定用哪种排序策略或者让sas自己选择最好的

5.2:Using the SORTCUTP= System Option

The SORTCUTP= system option specifies the number of bytes above which the host sort utility is used instead of the SAS sort utility.

OPTIONS SORTCUTP=n / nK / nM / nG / MIN / MAX / hexX;

5.3:Using the SORTCUT= System Option

Beginning with SAS 9, the SORTCUT= system option can be used to specify the number of observations above which the host sort utility is used instead of the SAS sortutility.

OPTIONS SORTCUT=n / nK / nM / nG / MIN / MAX / hexX;

5.4:Using the SORTNAME= System Option

The SORTNAME= option specifies the host sort utility that will be used if the value of SORTPGM= is BEST or HOST.

OPTIONS SORTNAME=host-sort-utility name;
options sortpgm=best sortcutp=10000 sortname=syncsort;
时间: 2024-10-03 14:02:46

sas优化技巧(3)排序的相关文章

sas优化技巧(2),缩减数据存储空间、length、compress、reuse、data步视图

1:控制sas数据存储空间大小 1.1:缩减字符变量存储空间 sas怎么存储字符变量? 对于赋值情况的字符型变量,变量的长度依据第一个值得长度 比如name=yi(那么name的长度即为2),然后再给其赋值name=can,那么只会读入ca 对于datalines读入或从外部数据集中读入的数据,sas默认为字符变量长度为8. 用length语句改变长度,data语句中要出现在变量前才有用. 1.2:缩减数值变量存储空间 sas怎么存储数值变量 sas默认数值变量长度为8 length改变长度,以

sas优化技巧(1) 追踪资源使用情况选项,控制内存使用情况bufsize、bufno、sasfile、ibufsize

CPU time:the amount of time the central processing unit (CPU) uses to perform requested tasks such as calculations, reading and writing data, conditional logic, and iterative logic.CPU time is measured when data must be processed in the program data

Get MySQL这5个优化技巧

一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善.这篇文章主要谈谈MySQL数据库在发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分为以下五个阶段: 阶段一:数据库表设计 项目立项后,开发部门根据产品部门需求开发项目. 开发工程师在开发项目初期会对表结构设计.对于数据库来说,表结构设计很重要,如果设计不当,会直接影响到用户访问网站速度,用户体验不好!这种情况具体影响因素有很多,例如慢查询(低效的查询语句).没有适当建立索引.

SQL优化技巧

我们开发的大部分软件,其基本业务流程都是:采集数据→将数据存储到数据库中→根据业务需求查询相应数据→对数据进行处理→传给前台展示.对整个流程进行分析,可以发现软件大部分的操作时间消耗都花在了数据库相关的IO操作上.所以对我们的SQL语句进行优化,可以提高软件的响应性能,带来更好的用户体验. 在开始介绍SQL优化技巧之前,先推介一款数据库管理神器Navicat,官网:https://www.navicat.com.cn/whatisnavicat Navicat是一套快速.可靠和全面的数据库管理工

让数据库飞起来 十大DB2优化技巧

DB2是IBM出口的一系列关系型数据库管理系统,分别在不同的操作系统平台上服务.下文中将为大家讲解DB2十大优化技巧. 为了帮助DB2 DBA 避免性能灾难并获得高性能,我为我们的客户.用户和 DB2 专家同行总结了一套故障诊断流程.以下详细说明在 Unix.Windows 和 OS/2 环境下使用 DB2 UDB 的电子商务OLTP 应用程序的10 条最重要的性能改善技巧,希望下文中涉及到的内容对大家能够有所帮助. 一. 监视开关 确保已经打开监视开关.如果它们没有打开,您将无法获取您需要的性

SQL Server 聚合函数算法优化技巧

Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值执行计算并返回单一的值.聚合函数对一组值执行计算,并返回单个值.除了 COUNT 以外,聚合函数都会忽略空值. 聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用. v1.写在前面 如果有对Sql server聚合函数不熟或者忘记了的可以看我之前的一片博客.sql server 基

SQL优化技巧(Oracle)

SQL优化技巧(1): Where子句中的连接顺序:oracle采用自下而 上的顺序解析where子句,根据这个原理,表 之间的连接必须写在其他where条件之前,那些可以过滤掉大量记录的条件 必须写在where子句的末尾. 例如 低效:select * from report_sale_account e where hsje>5000 and dzxl = '000001' and 25<(select count(*) from report_sale_account where cod

oracle sql优化技巧

数据库方面一直是自己的薄弱项,现在以本文慢慢积累总结oracle sql优化的一些技巧. 1.首先大家很容易想到的一切优化技巧--索引,索引有啥用?索引在表数据量很大时添加索引确实能加快查询速度,通过索引查询能很好地避免全表扫描. 但应该也要注意的时这是在数据量较大的时候.同时数据较小时,反而浪费索引空间.另外,添加索引之后数据的插入,更新反而会变慢,在插入或修改记录 时需要新建索引并排序. 索引创建语句: create [unique] index xxx on A(column 1,colu

MySQL通用优化技巧 | Ucloud运维在线微信群分享

MySQL通用优化技巧 | Ucloud运维在线微信群分享 2015-09-17 MySQL中文网 本文根据DevOps华南运维圈@UCloud微信群「大话运维」的嘉宾分享整理而成.「大话运维」将邀请业界运维前线技术专家作为分享嘉宾,分享技术趋势和技术实战,为运维朋友提供各种踩坑.躲坑.绕坑新技能. 嘉宾介绍 叶金荣Oracle MySQL ACE,国内最早的MySQL推广者.2006年创办国内首个MySQL专业技术网站 MySQL 中文网.资深MySQL专家,10余年MySQL经验,擅长Mys