我要做的是制作一个简单的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;
你知道如何处理这个问题吗?
答案 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;