在 SAS 中有条件地串联
Concatenated where conditional in SAS
我正在尝试编写一个宏来对数据集执行 proc 汇总操作。
这个宏有几个变量:
- 下限日期(开始=
'01Jan2013'd
)
- 上限日期(结束=
'01Jan2016'd
)
- 附加 'and' 条件(有时
''
,有时 'and state = XXX'
)
这些变量被输入到下面宏中的 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')
我正在尝试编写一个宏来对数据集执行 proc 汇总操作。
这个宏有几个变量:
- 下限日期(开始=
'01Jan2013'd
) - 上限日期(结束=
'01Jan2016'd
) - 附加 'and' 条件(有时
''
,有时'and state = XXX'
)
这些变量被输入到下面宏中的 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')