SAS随记
来源:互联网 发布:linux多线程 编辑:程序博客网 时间:2024/05/16 03:08
最近老系统的sas代码在计算过程中,出现了少数据的情况,我经过了几次检查代码后,还是未发现问题。
最后在一个资深同事帮助下,发现了问题的原因,但是自己回想起来还是觉得自己细心的程度不够和如何调试SAS代码不够熟练,说明如下:
在代码中主要是以下这段代码(敏感地方将略去):
data test.top_order_merge2;
merge
source.order_sub_1(in=a)
source.order2(in=b keep=col1 col2 col3 col4 col5 col6 state col7) ; /*这里将其他字段变成col前缀,主要是state)
by col1 col2;
if a and b;
run;
就是这段代码,merge的用意是a表示来自order_sub_1,b表示来自order2。
keep的意思就是保留order2中那些字段,但我当时把state看成了status了。
当两张表有重复的字段的值,后一张表的值将覆盖前一张表里的值。
因为把state看成了status了,所以后面就成了定向思维,一厢情愿的认为top_order_merge2表里的值就是来自order2表的state列的值。
因为order2中state的有效状态值只有5个,但order_sub_1里的state的有效状态值有10个。这样其实是有10个状态值,而我认为就是5个状态值(这样就不会掉记录),但实际的情况是在后续的检查中,自然就会过滤掉部分状态的记录。
所以导致该出来的数据没有在结果集里出现。
后来通过其他同事帮忙,一步步运行和生成结果集检查后,才发现state来自order_sub_1里state的值,而后续SAS在判断条件中是按order2里state值来判断,自然就会有遗漏。
从这件事情总结:
第一:SAS检查代码与开发语言检查不同。是一步步运行每个SQL,去查看结果集
第二:细心程度需要提高,别一味想当然
第三:状态值捕捉不全面
第四:对SAS语法熟练程度不够,因为不是经常用,有时候间隔一段时间才会去用,而这段时间里很容易忘记。
以后会更加注意这样的情况,避免再次重复发生。
- SAS随记
- sas
- sas
- sAS
- sas
- SAS
- SAS
- sas
- SAS
- 随记
- 随记
- 随记
- 随记
- 随记
- 随记
- 随记
- 随记
- 随记
- jquery 关于odd和even的执行效率
- linux不同版本下裸设备的配置
- 简单的Memory leak跟踪
- PHP生成word的三种方式
- minimalcomps knob(旋钮)
- SAS随记
- 如何创建一个Sencha Touch 2应用_记事本案例(第四部分)
- 我指间的刺青是对你的誓言
- 服务器技术系列综述(二)
- .net的一个Bug:Int64与Byte[8]互转的问题
- DB2谓词
- 黑马程序员---java面向对象分析与设计
- KMP字符串匹配
- 文件是否真的写入了磁盘?