2015-03-03 157 views
0

我正在设计一个通用宏来做一个使用宏变量(比如说X)来更新一个表,它被用作列名。我遇到的问题是,有这样的变量X(它在where子句中用作列名)为空。有人可以帮助请使用宏变量作为列名

回答

1

我不想where子句时&X是空白的,然后做一些事情,如:

%if %length(&X) > 0 %then where &X = 'blahblah'; 

这样的地方,如果&X中有文本条款只被创建。

+0

谢谢。有效。 – Tladoo 2015-03-03 14:57:10

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,以避免一个无形的笔记。

+0

它应该是'%put&x ='? – Lovnlust 2015-03-04 01:44:20

+0

@rbet不,在9.3+这个语法上是正确的。在早期版本中,等号不会在任何地方工作(除了放置字符本身)。 – Joe 2015-03-04 02:05:52