2015-03-03 160 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