美文网首页
277:工作中实用的解决问题方法

277:工作中实用的解决问题方法

作者: SASPRO的打工人生活 | 来源:发表于2023-10-30 22:59 被阅读0次

    最近工作很忙,随缘更新,也没学啥,混日子了。

    一:对于缺失的变量如何不报warning?

    有时候我们在SUPP数据集创建了一些QNAM,然后在创建ADaM的时候,因为某些原因,这个变量不存在了,那么我们在转置之后,然后程序里又写上了这个变量的名字,那么程序肯定会报未初始化的note。

    data test;

    if a="test" then flag="Y";

    run;

    对于这样的问题,我们可以这样化解:

    if a="" then a="";

    这样不管这个变量存不存在都不会报那个log,而且之后这个变量有值的话,它也不会置空,而是值是什么就是什么。你也不需要设定它的长度,很方便。

    data test;

    if a="" then a="";

    if a="test" then flag="Y";

    run;

    二:有时候我们跑proc template的时候会遇到这样的ERROR:

    ERROR: Template 'xxxxx' was unable to write to the template store!

    SAS官网上是这样解释的:

    对于这样的ERROR,一条语句就可以解决:

    ods path(prepend) work.templat(update);

    三:对于宏变量的处理

    有时候我们会遇到日期中出现不是日期格式的数据,比如“NA”,“未知”,首先这应该是DM录入不认真,CRF上都没有这个选项,哪怕为空也行,但是就是不知道这些值哪来的。

    那么我想提前对这些“未知”处理,那么可能就需要用到一些宏。

    首先可以告诉大家这样肯定是处理不了的,我还是建议大家好好看我的宏系列,这样写宏出问题的时候,你至少知道为什么会出错或者不起作用。

    比如上面这样,你感觉逻辑很正确,应该可以正确输出的,但是如果你了解宏的运行机制,就知道不会成功,因为宏语言是优先于data步先编译的。

    %if &indate=未知 %then %do;已经先编译了,而且宏变量也先读取了进来,所以可以理解为%if CMSTDAT=2023/10 %then %do;但是CMSTDAT这个变量在哪呢?注意这时候SAS还没set test数据集呢,所以肯定不会成功。

    test2数据集并没有输出flag这个变量,但是如果我们把%if 变成正常的if,这时候就可以实现了

    相关文章

      网友评论

          本文标题:277:工作中实用的解决问题方法

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