как передать диапазон числовых значений в параметре макроса? - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь написать макрос, который отображает возраст от 20-40 или> = 30, только если он передан в качестве параметра.

Код выглядит так:

%macro detReport(p_age=);   

proc sql;

create table detail as

select acct_id,

   name format=$20. ,

   int(yrdif(Birthday,today(),'ACTUAL')) as Age,

   balance,

   state,

   last_Tran_date

   from profile

  %if &p_age ne "" %then %do;

        %if %index(&p_age,-) > 0 %then %do;

   where int(yrdif(Birthday,today(),'ACTUAL')) between (%scan(&p_age,1,"-") and 
   %scan(&p_age,2,"-"))

  %end;

   %end;

  %else %do;

   where (int(yrdif(Birthday,today(),'ACTUAL')) &p_age);

    %end;

  quit;

 proc print data =detail ;

 run;

 %mend detReport;

 %detReport( p_age =20-40)

Код работает, когда передается одно значение (например,> = 30), но выдает ошибку, когда передается 20-40.

Любая помощь приветствуется!

PS Здесь новичок!

1 Ответ

0 голосов
/ 30 января 2019

Почему бы просто не позволить вызывающей стороне перейти в логику?

where (int(yrdif(Birthday,today(),'ACTUAL')) &p_age)
...
%detReport( p_age =between 20 and 40)
%detReport( p_age = >= 40)
...