将宏变量转换为宏

时间:2014-09-15 16:43:51

标签: sas proc-sql

我的代码1在Proc SQL中根据用户提示输入创建了一个where子句(商店号的'Str')我想使用宏(参见下面的示例代码2)来替换Macro变量。我怎么能让它工作呢?谢谢!

代码1

%global STR_COUNT STR;
%let STR_WHERE_CLAUSE=;
data _null_;
if missing(symget('str'))=0 then
do;
length STR_LIST $1000; 
STR1=symget('STR');
STR2=put(input(STR1,best4.),z4.);
STR_LIST=quote(STR2);
put STR_LIST;
end;
if missing(STR_LIST)=0 then
call symputx('STR_WHERE_CLAUSE',cats(' and T1.STR_SITE_NUM in (',STR_LIST,')'));
run;
%PUT &STR_Where_Clause;

代码2

%macro condition3(table=);
and &table..store in ('1234')
%mend condition3;

然后我可以在SQL中使用宏,就像宏变量一样。

select xxx from t1, t2 where condition1
and condition2
%condition3(table=t6)

1 个答案:

答案 0 :(得分:0)

我不确定我完全理解你的问题。但是,如果您尝试将代码1包装在宏中并使用宏函数替换datastep逻辑,那么这应该可以实现:

%macro condition3(table, STR);
    %let STR_LIST = %sysfunc(putn(STR, z4.));
    and &table..store in ("&STR_LIST.")
%mend condition3;

proc sql;
    select xxx 
    from 
        t1, 
        t2 
    where 
        condition1 and
        condition2
        %condition3(t6, 34);
quit;