两个连续值的平均值
Average values in two consecutive values
我在宏中有以下代码:
...
data HE2update (drop=sum_values n_values);
set dst_end_update;
by short_date HE;
%if HE=2 or 3 %then %do;
sum_values+value;
n_values+1;
%if HE=2 %then delete;
%else %if HE=3 %then %do;
value = round(sum_values/n_values);
HE=2;
%end;
%end;
%if HE>3 %then HE=HE-1;
%else HE;
run;
我收到以下错误:错误 22-322:语法错误,应为以下之一:!、!!、&、*、**、+、-、/、<、<=、< >, =, >, ><, >=, AND, EQ, GE, GT, IN,
LE、LT、MAX、MIN、NE、NG、NL、NOTIN、OR、^=、|、||、~=。
错误似乎与最后的 if/then/else 语句有关 我看不出需要更正的内容。任何帮助将不胜感激。
我认为这里根本不需要宏观逻辑。
data HE2update (drop=sum_values n_values);
set dst_end_update;
by short_date HE;
if HE in (2, 3) then do;
sum_values+value;
n_values+1;
if HE=2 then delete;
else if HE=3 then do;
value = round(sum_values/n_values);
HE=2;
end;
end;
if HE>3 then HE=HE-1;
run;
宏处理器用于生成代码,不对数据进行操作。
您的第一个 %IF 正在测试字符串 HE
是否等于 2
(这是假的)然后将结果与数字 3
(这是真的) 因此测试为真,这意味着生成这两个语句以包含在您的数据步骤中。
sum_values+value;
n_values+1;
%IF/%THEN/%DO/%END 块中的其他两个 %IF 测试均为假,因为字符串 HE
既不等于数字 2
也不等于数字3
.
然后最后测试字符串 HE
是否大于数字 3
这是 TRUE 因为 H
在 ASCII 整理序列中位于 3
之后。这意味着您的程序将生成代码
HE=HE-1
请注意,该赋值语句没有结束分号。程序中的分号标志着 %IF/%THEN 语句的结束。
所以你生成的代码是:
data HE2update (drop=sum_values n_values);
set dst_end_update;
by short_date HE;
sum_values+value;
n_values+1;
HE=HE-1 run;
最后一个赋值语句不是有效的 SAS 语法。另外没有RUN;
结束数据步骤。
我在宏中有以下代码: ...
data HE2update (drop=sum_values n_values);
set dst_end_update;
by short_date HE;
%if HE=2 or 3 %then %do;
sum_values+value;
n_values+1;
%if HE=2 %then delete;
%else %if HE=3 %then %do;
value = round(sum_values/n_values);
HE=2;
%end;
%end;
%if HE>3 %then HE=HE-1;
%else HE;
run;
我收到以下错误:错误 22-322:语法错误,应为以下之一:!、!!、&、*、**、+、-、/、<、<=、< >, =, >, ><, >=, AND, EQ, GE, GT, IN, LE、LT、MAX、MIN、NE、NG、NL、NOTIN、OR、^=、|、||、~=。
错误似乎与最后的 if/then/else 语句有关 我看不出需要更正的内容。任何帮助将不胜感激。
我认为这里根本不需要宏观逻辑。
data HE2update (drop=sum_values n_values);
set dst_end_update;
by short_date HE;
if HE in (2, 3) then do;
sum_values+value;
n_values+1;
if HE=2 then delete;
else if HE=3 then do;
value = round(sum_values/n_values);
HE=2;
end;
end;
if HE>3 then HE=HE-1;
run;
宏处理器用于生成代码,不对数据进行操作。
您的第一个 %IF 正在测试字符串 HE
是否等于 2
(这是假的)然后将结果与数字 3
(这是真的) 因此测试为真,这意味着生成这两个语句以包含在您的数据步骤中。
sum_values+value;
n_values+1;
%IF/%THEN/%DO/%END 块中的其他两个 %IF 测试均为假,因为字符串 HE
既不等于数字 2
也不等于数字3
.
然后最后测试字符串 HE
是否大于数字 3
这是 TRUE 因为 H
在 ASCII 整理序列中位于 3
之后。这意味着您的程序将生成代码
HE=HE-1
请注意,该赋值语句没有结束分号。程序中的分号标志着 %IF/%THEN 语句的结束。
所以你生成的代码是:
data HE2update (drop=sum_values n_values);
set dst_end_update;
by short_date HE;
sum_values+value;
n_values+1;
HE=HE-1 run;
最后一个赋值语句不是有效的 SAS 语法。另外没有RUN;
结束数据步骤。