使用宏变量作为列名

时间:2015-03-03 12:52:39

标签: sas

我正在设计一个通用宏来使用宏变量(比如X)来更新表,该宏变量用作列名。我遇到的问题是有一些ocassions,其中此变量X(在where子句中用作列名)为null。有人可以帮忙吗

2 个答案:

答案 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以避免使用未初始化的音符。