您好我仍然在努力使用SAS MACRO循环:
%Let t1=12Mth;
%Let t2=20;
%Let t3=40;
%Let t4=40;
%Let t5=50;
%Let t6=60;
%macro Clean(time);
data Milk1;
set MilkNew;
%Do I = 1 %to &time.;
/*If MilkE=2, then MilkF should be 0 and MilkA should be 0 and should be 99 and MilkT..Sp should be null*/
if (MilkE=2 and (MilkF&&t&I. ne 0 or MilkA&&t&I. ne 0 or (MilkT&&t&I..Sp is not NULL) ) ) then delete;
%end;
run;
%mend Clean;
%Clean(6)
此代码的目的是删除错误的条目。错误发生在“is”来自“is not null”。它显示了期望算术运算符。为什么“不是空”不能在这里使用?有没有其他方法可以做到这一点?
谢谢!
答案 0 :(得分:2)
这与宏语言无关。 is not null
在该上下文中不是有效的SAS语法(在主数据步骤中)。它仅在以下情况下有效:
PROC SQL
语法WHERE
陈述WHERE
数据集选项以及其他一些不经常遇到的设置。在基本的SAS语法中,它是不合法的。
您可以使用对missing
函数的引用或缺少值(' '
表示字符,.
表示数字)替换它。
if (MilkE=2 and (MilkF&&t&I. ne 0 or MilkA&&t&I. ne 0 or not missing(MilkT&&t&I..Sp) ) ) then delete;
这就是我写这个的方式。