全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2410 8
2012-12-29

1、  if语句创造子数据集,if语句存在的位置与sas的内存有关,显然if语句放在前面减少sas内存。If判断语句放在前面,直接选取了符合我们的数据,另外部分不用进入计算,所以会优化我们的程序。

2、  if/else与select语句

(1)      对于字符变量,if/else比select语句更高效。

(2)      一般select语句的数据值是分布式的(我理解是类似离散型的数据)

(3)      也可以把do循环放到if/else与select语句中

3、  排除不必要的传递

(1)      使用一个数据步创造多个数据集

(2)      使用datasets步去修改变量属性。(只能修改变量属性,而不能该变量值)

(3)      使用含有where语句的sort过程去创造排序的子集

4.whereif判断的区别

if语句把全部数据加载到pdv里面,而where只选取了符合我们要求的数据,所以显然where比if优化,高效。

4、  keep与drop的使用

当keep=、drop=使用在set、merge后面,pdv里面只生成我们需要的变量。而drop、keep使用在数据步里面,效果一样。

5、避免不必要的程序调用

用一个过程完成多个任务(例如 procsql/proc datasets等)


仅供大家参考,有些地方自己翻译、理解的不全面,详细请参考 sas advance。欢迎大家批评指正。




二维码

扫码加我 拉你入群

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

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

全部回复
2012-12-30 00:25:19
谢谢楼主!
二维码

扫码加我 拉你入群

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

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

2012-12-30 14:56:14
4、  keep与drop的使用

当keep=、drop=使用在set、merge后面,pdv里面只生成我们需要的变量。而drop、keep使用在数据步里面,效果一样。

-----------------------------------------
效果不一样。
如果是用在数据集后,意味着数据集里的keep变量进入PDV;如果是用在data步,意味着数据集中所有的变量都进入了PDV。哪个效率更高,可想而知。
二维码

扫码加我 拉你入群

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

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

2012-12-31 01:08:23
楼上正解
二维码

扫码加我 拉你入群

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

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

2013-1-18 15:04:42
zhangg 发表于 2012-12-30 14:56
4、  keep与drop的使用

当keep=、drop=使用在set、merge后面,pdv里面只生成我们需要的变量。而drop、ke ...
不好意思  理解有误。谢谢更正这个。
二维码

扫码加我 拉你入群

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

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

2013-1-18 15:07:10
对于 substr、scan等字符型函数,可以通过之前定义其长度从而进行优化。
此处列举两个base里面的考题,scan函数的默认长度是200,substr函数的长度于其处理的变量长度一样。所以提前定义其长度,可以进行优化。
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群