在 SAS 中有条件地串联

Concatenated where conditional in SAS

我正在尝试编写一个宏来对数据集执行 proc 汇总操作。

这个宏有几个变量:

这些变量被输入到下面宏中的 where 语句中。请注意,有时会有 'and' 条件,有时根本没有。

%macro program1(start,end,cond); %macro _(); %mend _;
    proc summary data = data1 nway missing;
        where &start. < month < &end. || &cond.;
        class month_inc;
        var var1 var2;
        output out =summ_data1 sum=;
    run;
%mend;

我无法让宏变量在 where 语句中正常工作。 || 不起作用。

我试过这样使用 CATX:

where catx(' ',&start. le month_inc le &end.,&cond.);

这在一定程度上有效。 &start.&end. 变量解析为数值而不是 SAS 日期,因此没有正确总结我的结果。

如果您按字面意思传入关键字 AND 作为参数 COND (cond=and state='XXX') 值的一部分,则只需从 WHERE 语句中删除连接运算符。

where (&start<month<&end) &cond ;

否则使用宏逻辑有条件地生成引用可选COND值的部分。

我喜欢使用 WHERE ALSO(也称为 where and)语句来扩充现有的 WHERE 语句。

%macro program1(start,end,cond); 
  proc summary data = data1 nway missing;
    where &start. < month < &end. ;
%if %length(&cond) %then %do;
    where also &cond.;
%end;
    class month_inc;
    var var1 var2;
    output out =summ_data1 sum=;
  run;
%mend;

那么您的示例调用可能如下所示:

%program1(start = '01Jan2013'd
         ,end = '01Jan2016'd
         ,cond = state = 'XXX')