%macro chuli2;
data t2;
set t1;
%if %chuli1 %then delete;
run;
%mend;
%chuli2;
请指教!作者: shiyiming 时间: 2004-8-20 10:52 标题: test [code:227d2]%macro test;
data t2;
set t1;
%do i=1 %to 10;
if abs(x&i.)>5 then delete;
%end;
run;
%mend;
%test [/code:227d2]
如用%if...%then语句,delete和abs都会有问题,不知为什么?
另外,这个问题不用宏也好解决,如下
[code:227d2]data t2;
set t1;
array arr x1-x10;
do over arr;
if abs(arr)>5 then delete;
end;
run;[/code:227d2]作者: shiyiming 时间: 2004-8-20 18:02 标题: re macro中嵌套的data step中是不能用%do,%if,%then之类的,它就是一个简单的data step。作者: shiyiming 时间: 2004-8-21 09:50 标题: Re: re 这个观点不完全对,宏语句可以出现在几乎所有的场合,但必须正确使用,宏语句和宏变量有其特定的规则和使用方式,有时候容易和别的语句规则相混淆,因此容易出错。
data t2;
set t1;
if %test then delete;
run;作者: shiyiming 时间: 2004-8-23 20:49 标题: You can not do it that way! 首先申明一点,%if %then %else语句在data步中是可以使用的,但如果其中嵌套了data步语句,则必须写成如下的形式:
%if condition %then %do;
%end;
%else %do;
%end;
即必须和%do;%end;语句配合使用。
你所设计的data步程序,
data t2;
set t1;
if %test then delete;
run;
将%test作为一个宏条件来使用,而%test是一个预先定义的宏程序,我还未曾见过这样的应用方式,并且认为这样是行不通的。作者: shiyiming 时间: 2004-8-24 17:19 标题: RE 能否举个例子说一下%if %then。。。在data步中的使用,我试了不行。