在有条件的SAS中连接

时间:2016-11-23 23:32:59

标签: sas concatenation where

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

这个宏包含一些变量:

  • 下限日期(start = '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日期,因此无法正确汇总我的结果。

1 个答案:

答案 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