是否可以将多个SAS宏值添加到单个宏中

时间:2014-04-09 13:35:52

标签: sas sas-macro

例如,我有2个宏变量....

%let A = ('a','b','c');
%let B = ('d','e','f');

我正在尝试从2个宏变量中创建一个新的宏变量..

%let c = ('a','b','c','d','e','f');

I tried %let c = (&A,&B);

3 个答案:

答案 0 :(得分:4)

使用%SYSFUNC中的compress()函数从A和B中删除括号...

您需要使用%(和%)来表示括号,并防止它们被解释为%SYSFUNC的闭包。

%LET A = ('a','b','c') ;
%LET B = ('d','e','f') ;

%LET A2 = %SYSFUNC(compress(&A,%(%))) ;
%LET B2 = %SYSFUNC(compress(&B,%(%))) ;

%LET C = (&A2,&B2) ;

/* or all in one... */
%LET C = (%SYSFUNC(compress(&A,%(%))),%SYSFUNC(compress(&B,%(%)))) ;

%PUT &C ;

Macro variable C resolves to ('a','b','c','d','e','f')

顺便提一下,如果你打算在in()条件下使用& C,它将按原样工作,即

%LET A = ('a','b','c') ;
%LET B = ('d','e','f') ;
%LET C = (&A,&B) ;

data test ;
  letter = 'd' ;
  exist = letter in &C ; /* resolves to (('a','b','c'),('d','e','f')) */
run ;

答案 1 :(得分:4)

如果您是定义A和B的人,则可以在定义两个变量时删除括号。

%let A = 'a','b','c';
%let B = 'd','e','f';
%let C = (&A,&B);
%PUT &C ;

日志结果 - ('a','b','c','d','e','f')

乔......这不是更简单吗?

答案 2 :(得分:3)

虽然可以像Chris J一样将它们组合起来,但更好的答案不是以这种方式存储它们。如果你用括号存储它们,因为稍后在需要括号的情况下使用它们,那么只需提供它们。

%let A = 'a','b','c';
%let B = 'd','e','f';
%let C = &a,&b;

data want;
set have;
if a in (&a) or b in (&b) or c in (&c) then do;
output;
end;
run;

那种简单的代码。