【问题标题】:Average values in two consecutive values两个连续值的平均值
【发布时间】:2021-08-30 20:45:01
【问题描述】:

我在宏中有以下代码: ...

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 语句有关,我看不出我需要更正什么。任何帮助将不胜感激。

【问题讨论】:

    标签: sas syntax-error sas-macro


    【解决方案1】:

    宏处理器用于生成代码,而不是对数据进行操作。

    您的第一个 %IF 正在测试字符串 HE 是否等于 2 (这是错误的),然后将结果与数字 3 进行 OR 运算(这是真的)所以测试是真的,这意味着生成这两个语句以包含在您的数据步骤中。

        sum_values+value;
        n_values+1;
    

    该 %IF/%THEN/%DO/%END 块中的其他两个 %IF 测试都是错误的,因为字符串 HE 不等于数字 2 或数字 3

    然后最后测试字符串HE 是否大于数字3,这是正确的,因为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; 可以结束数据步骤。

    【讨论】:

      【解决方案2】:

      我认为你根本不需要宏观逻辑。

      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;
      

      【讨论】:

      • 谢谢!恢复理智。
      猜你喜欢
      • 1970-01-01
      • 2020-08-25
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 2020-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多