SAS中文论坛

标题: 请指点一下条件语句(%if...%then %do)错在哪? [打印本页]

作者: shiyiming    时间: 2011-11-21 04:42
标题: 请指点一下条件语句(%if...%then %do)错在哪?
下面的程序是为了把符合条件(s_d>&day.)的数据去出来,如果s_d全部小于&day.,那么就在SAS log里给出提示.
但问题是,'%if &maxb.>="&day."d %then %do;' 好像不起任何作用,就想请教一下,这是为什么,如何改正(我知道可以用open,但就是觉得很奇怪,为何这个条件语句就不行)? 谢谢!!!

data a;
input unid $ s_d date9.;
format s_d : date9.;
cards;
001 01jan1999
002 23sep2009
003 11may2000
004 27jul2002
;
run;
%macro t1(day=,dataout=);
proc sql;
create table b as
  select *,max(s_d) as maxb format=date9.
    from a;
quit;
proc sql noprint; select maxb into :maxb from b; quit;
%put maxb=&maxb.;
%if &maxb.>="&day."d %then %do;
   data &dataout.;
    set b(drop=maxb);
    if s_d>="&day."d;
   run;
   proc delete data=b;run;
%end;
  %else %do;
    proc delete data=b;run;
    %put NOTE: NO RECORDS SELECTED;
  %end;
%mend;
%t1(day=01jan2010,dataout=a2)
作者: shiyiming    时间: 2011-11-21 23:44
标题: Re: 请指点一下条件语句(%if...%then %do)错在哪?
bdos 变量没有定义吧。京剧
作者: shiyiming    时间: 2011-11-22 10:52
标题: Re: 请指点一下条件语句(%if...%then %do)错在哪?
这是个typo.
我已经改过来,但程序还是不行,可否再看一下?

谢谢!
作者: shiyiming    时间: 2011-11-22 22:31
标题: Re: 请指点一下条件语句(%if...%then %do)错在哪?
你的程序基本是正确的。京剧

[code:15cdy95g]%macro t1(day=,dataout=);
proc sql;
create table b as
select *,max(s_d) as maxb/* format=date9.*//*unecessary and confusing*/
from a;
quit;
proc sql noprint; select maxb into :maxb from b; quit;
%put maxb=&maxb.;
%if &maxb.>= %sysevalf("&day."d) /*make them comparable*/%then %do;
data &dataout.;
set b(drop=maxb);
if s_d>="&day."d;
run;
proc delete data=b;run;
%end;
%else %do;
proc delete data=b;run;
%put NOTE: NO RECORDS SELECTED;
%end;
%mend;

%t1(day=01jan2010,dataout=a2)[/code:15cdy95g]
作者: shiyiming    时间: 2011-11-22 23:44
标题: Re: 请指点一下条件语句(%if...%then %do)错在哪?
wow, great, thanks a lot.




欢迎光临 SAS中文论坛 (https://www.mysas.net/forum/) Powered by Discuz! X3.2