在SAS中,Format过程步可以使用户为变量自定义Informat 和Format。在日常工作中,我们使用最频繁的就是这个过程步的Value语句,为变量值设置对应的输出字符串。
Proc Format的搜索机制
NOTSORTED就是Value语句的一个选项,在介绍这个选项之前先介绍下,PROC FORMAT搜索变量值匹配对应格式的机制。这个搜索机制是二分法,用一个简单的例子来说明:
value num
1 = "Yes"
2 = "No"
3 = "Possibly"
;
如果在Proc Format中使用Value语句定义这个num的格式,在引用这个格式的进行匹配的的时候,SAS会先搜索会先匹配范围中最中间的值。在这个例中,SAS首先将变量值与中间值2="No"
进行比较;如果不匹配,然后将该值与较高范围(3="Possibly"
)进行比较;如果不匹配,再将该值与较低范围(1="Yes"
)进行比较。这就是所谓的二分法搜索机制,这个方法在大样本搜索比较中,有更高的运行效率。
NOTSORTED选项
这个选项会使SAS,按照定义的顺序来存储Fortmat的值或范围。如果不指定NOTSORTED选项,SAS会使用默认排序进行存储,并使用二分搜索算法定位特定值所属的范围;如果指定NOTSORTED选项,那么SAS将按照用户定义的顺序搜索每个范围,直到找到匹配项。
关于SAS搜索匹配对应值速度的快慢,这一点对于我们日常编程工作中感知度不强。NOTSORTED选项具体的使用建议,SAS官方文档中给出了3个方向:
- 当知晓数据某些范围出现的可能性时,我们可以先搜索可能性大的范围来节省处理时间;
- 在使用FMTLIB选项将保存好的格式输出到SAS日志时,希望希望格式以定义的顺序显示;
- 在PROC MEANS、PROC SUMMARY或PROC TABULATE等过程步中,使用order =DATA选项和PRELOADFMT选项来分析的类变量时,希望保留定义范围的顺序。
在这3个方向中,第3个方向使用频率最高。
未完待续。。。