我正在尝试编写一个宏来对数据集执行proc汇总操作。
这个宏包含一些变量:
'01Jan2013'd
)'01Jan2016'd
)''
,有时为'and state = XXX'
)这些变量被输入到下面宏中的where语句中。请注意,有时会出现'和'条件,有时根本没有。
%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日期,因此无法正确汇总我的结果。
答案 0 :(得分:1)
如果你真的将关键字AND作为参数COND(#include <stdio.h>
#include <math.h>
int main(){
int base = 2, exponent = 3, result;
result = pow(base, exponent);
printf("%d^%d = %d\n", base, exponent, result);
return 0;
}
)的值的一部分传入,那么只需从WHERE语句中删除连接运算符。
#include <stdio.h>
#include <math.h>
int main(){
int i, n = 10, result, totalEven = 0, totalOdd = 0;
for (i = 1; i < n; i++){
if (i % 2 == 0){
/* The number is even */
result = pow(i, 3);
totalEven += result;
} else {
/* The number is odd */
result = pow(i, 3);
totalOdd += result;
}
}
printf("The sum of all even cubes from 1 to %d is %d.\n", n, totalEven);
printf("The sum of all odd cubes from 1 to %d is %d.\n", n, totalOdd);
printf("The sum of all cubes from 1 to %d is %d.\n", n, totalEven+totalOdd);
return 0;
}
否则使用宏逻辑有条件地生成引用可选COND值的部分。
我想使用cond=and state='XXX'
(也称为where (&start<month<&end) &cond ;
)语句来扩充现有的WHERE ALSO
语句。
where and
那么你的示例调用可能如下所示:
WHERE