我正在设计一个通用宏来使用宏变量(比如X)来更新表,该宏变量用作列名。我遇到的问题是有一些ocassions,其中此变量X(在where子句中用作列名)为null。有人可以帮忙吗
答案 0 :(得分:1)
当&X
为空时,我不想要一个where子句,然后执行以下操作:
%if %length(&X) > 0 %then where &X = 'blahblah';
这样只有在&X
中包含文本时才会创建where子句。
答案 1 :(得分:1)
如果保证定义&x
但可能是空白,那么DWal的解决方案就是可行的方法。当宏变量是一个参数时,这很有用,并且每次运行宏时都会定义它。
如果可能根本没有定义,那么你需要使用%symexist()
检查是否完全定义了宏变量,可能除了%length
检查之外。
%macro test;
%if %symexist(X) %then %if %length(&x)>0 %then %do;
%put &=x;
%end;
%mend test;
%symdel x; *deletes x if it exists;
%test;
%let x=;
%test;
%let x=XValue;
%test;
我嵌套%if
以避免使用未初始化的音符。