最近工作很忙,随缘更新,也没学啥,混日子了。
一:对于缺失的变量如何不报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,这时候就可以实现了
网友评论