美文网首页SAS Log debug
139:细数工作中可能遇到的log(二)

139:细数工作中可能遇到的log(二)

作者: SASPRO的打工人生活 | 来源:发表于2022-08-21 22:02 被阅读0次

    哈哈,突然看到自己2020年记的笔记---"人生愿望清单",看完觉得自己当时的好天真,现在对这些愿望没有多大想法,除了第7个有一点点点想去,其他的感觉自己的人生都不需要了。

    我很喜欢记录生活,有些记到自己云笔记里面,有的记录在QQ空间,就这两个地方了。云笔记只有我一个人看到,记到QQ空间也是满足我的分享欲,但是又不想很多人看到,古怪的想法。

    细数工作中可能遇到的log(一)

    1:NOTE: MERGE 语句有多个数据集带有重复的 BY 值。

    出现这个note的原因就是数据集merge的时候,by变量起不到让两个数据集一对一拼接。

    比如下面这个例子,如果只是通过subjid paramn拼接,相当于

    相当于左边数据集和右边的数据集有多个相同值的记录,这样SAS就不能确认你到底是要拼那个,大家报这个log的时候,可以在大脑里想一下两个数据集拼接的过程,看下是几个变量导致的。

    下面两种情况都能保证不报这个log,但是拼接后的数据集得到的结果可能不是你想要的。所以在用merge的时候,除了by变量,其他的变量能keep就keep,否则的话会出现test2数据集的值把test1数据集相同变量的值给覆盖了。

    2:NOTE: 变量 XXXX 未初始化/ Variable is Uninitalized

    这种情况一般就是你定义长度的时候多为一个不存在的变量定义了长度。

    2:NOTE: 变量 XXXX 未初始化/ Variable is Uninitalized

    这种情况一般就是你定义长度的时候多为一个不存在的变量定义了长度。

    这种情况一般就是两个数据集set在一起的时候经常发生的,尤其是两个数据集有一样的变量且长度不一致,而且是长度较短的那个数据集先set的时候会报的log。如果是先set长度为200的,就不会报错,相当于SAS先为这个变量定义了200的默认长度。

    所以解决办法就是在set之前先定义一个>=变量最长长度的长度,或者在两个数据集都新建一个中间变量,然后定义这个中间变量的长度为同样的值,之后再set在一起(当然还是得删除旧的变量,否则还是会报错)

    我去,又不想写文章了,现在感觉自己写文章的心态变了,想偷懒了。我就把我以前记在云笔记的log截图出来吧,都是以前刚学习的时候犯的错,现在看到这些会感觉以前怎么这么蠢,这都不知道。

    这种一般是多加了分号或者少加了分号,尤其是在写PROC SQL会报的错。

    4:

    At least one W.D format was too small for the number to be printed. The decimal may be shifted by the "BEST" format.

    这是因为你算出来的数字超过你设定的format,

    比如你算出来的数字是1230,但是你的format只有3位,比如put(a,3.1);

    5:当初还在笔记里面记了这些问题

    宏里面能嵌套数据集吗?我都忘了这是什么问题,为什么会问这个问题

    6:log输出问题

    有时候我们需要将log输出到专门的文件夹里,可以通过这种方法:

    proc printto log="&sdtmlog\&pgmname..log" new;

    run;

    new这个选项代表替换以前原有的内容,比如说你的程序后来改动了,重新输出log,那么这个new就能帮你把新的log覆盖掉旧的log,如果去掉new,相当于把新的log set到旧的log,相当于拼接。

    但是最后记得加上

    proc printto;

    run;

    这个语句的作用就是使系统重新回到将log输出到log窗口的状态。

    相关文章

      网友评论

        本文标题:139:细数工作中可能遇到的log(二)

        本文链接:https://www.haomeiwen.com/subject/gpjbgrtx.html