检查SAS DIS参数是否为空

检查SAS DIS参数是否为空,sas,sas-macro,sas-dis,Sas,Sas Macro,Sas Dis,在SAS DIS中,我在作业上设置了日期参数。我尝试使用提供的下拉菜单设置默认值,但每次都出现错误 语法错误,应为以下之一:!,!!,&,*,***,+,-,/,=,和,EQ,GE,GT,IN,LE,LT,MAX,MIN,NE,NG,NL,NOTIN,或,^=,|,| |,~= 因此,我决定在继续之前检查参数是否为null,但我的各种尝试都没有成功。有没有一种方法可以通过用户编写的代码实现这一点?差不多 if(&date_param = .) then do; date = today(

在SAS DIS中,我在作业上设置了日期参数。我尝试使用提供的下拉菜单设置默认值,但每次都出现错误

语法错误,应为以下之一:!,!!,&,*,***,+,-,/,=,和,EQ,GE,GT,IN,LE,LT,MAX,MIN,NE,NG,NL,NOTIN,或,^=,|,| |,~=

因此,我决定在继续之前检查参数是否为null,但我的各种尝试都没有成功。有没有一种方法可以通过用户编写的代码实现这一点?差不多

if(&date_param = .) then do;
date = today();
else do;
date = &date_param;
end;
我在宏中尝试了这一点,但没有成功


非常感谢。

假设这类似于一个标准SAS宏变量,有几件事

首先,空参数实际上是空白的,而不是句点(这是数字数据集变量)。在数据步骤中,您可以这样检查:

if "&date_param." = " " then do;
第二,根据上下文,您可能需要在宏语法中执行此操作。如果要设置其他参数,可能需要执行以下操作:

%if &date_param. eq  %then %do;
  %let date=%sysfunc(today());
%end;
%else %do;
  %let date = &date_param.;
%end;

%sysfunc
允许您在宏代码中执行数据步函数。

我不是DIS专家,但我猜
&date\u param
是一个有效的SAS宏变量(并且是您感兴趣的参数)?嘿,乔。谢谢你的建议。尝试您的方法可以在缺少参数时填充默认值(除了我使用此链接中的方法检查缺少的值:)。我的问题是,当参数没有丢失时,变量似乎不接受它的值。我正在传递另一个SAS DIS作业的参数,该作业循环到此作业。有什么想法吗?不幸的是,我对DIS的工作原理知之甚少-这可能与此有关,对不起。@Joe我认为最好删除数据集检查中的空格,使其读取
if“&date_param.”=”,然后执行。这背后的原因是,您可以在宏代码中进行完全相同的比较(以确保一致性)。例如,
%如果“&x.”=“”,则%do。这也比
eq%和
语法更易于阅读、调试和故障排除。但那只是我的意见。@Rookatu我不明白你的评论。%来自Chung和King的isblank在DIS中应该可以正常工作。可能会在代码中显示%isblank以及生成错误的部分??我并不完全不同意。在datastep代码中,我更喜欢
,因为它在技术上是精确的,而且我一般不会从一个代码切换到另一个代码。但是在您的用例中,解决方案当然不是不合理的。