检查是否存在SAS提示变量

时间:2014-06-03 13:17:17

标签: sas prompt enterprise-guide

我要做的是制作一个简单的SAS EG流程,向用户询问两个参数 - 日期和标识符。两者都是可选的。

问题是,如果用户没有填写其中一个,则输入以下行:

table.insert_date = "&my_date."d 

返回

ERROR: Invalid date/time/datetime constant ""d

我已经处理了一些可以在项目中的所有代码之前插入的代码(工具 - >选项 - >自定义代码 - >在任务和查询代码之前插入自定义SAS代码)。我试过这个,它不起作用。

data _null_;
   if not(%symexist(my_date)) 
   then %let my_date='01jan01'd;
run;

你知道如何处理这个问题吗?

2 个答案:

答案 0 :(得分:2)

问题是您正在尝试将宏代码用作开放代码的一部分。这不是SAS工作的方式 - 它们在任何开放代码之前执行,通常用于生成后者。

在你的情况下,实际上你并不需要生成任何开放的代码,但无论如何你需要将宏语句包装到%MACRO-block中,然后整体执行它来调用这个宏:

%macro mymacro;
    %if not (%symexist(my_date)) %then %let my_date='01jan01'd;
%mend mymacro;

%mymacro

答案 1 :(得分:0)

德米特里,谢谢你的回答。它仍然没有像我想的那样工作......现在我知道为什么。

我发现(我相信如果有人更擅长SAS,他能够比我更好地解释它),当出现提示框时会创建提示变量。所以,问题在于它们是空的,并且出现上面显示的问题。

以下是我喜欢的答案。

data _null_;
 tmp = symget("my_date");  /* Need to assign my_date value to temp variable. */

 if tmp eq '' then /* because my_date eq '' doesn't work */
      do;
            call symput("my_date", '01jan01' ); /* assigning target variable */
      end;
      else call symput ("my_date", '01jan14'); /* assigning other value */
run;