【问题标题】:Call Incremental Datasets Created by Macro Function调用宏函数创建的增量数据集
【发布时间】:2022-08-23 20:57:55
【问题描述】:

我有一个名为 max_attempts 的宏变量,我是从一个 PROC SQL 创建的,对于我当前的数据文件,它等于 4。然后,我使用宏函数创建了高达max_attempts 的数据集,所以现在我有attempt1_tableattempt2_tableattempt3_tableattempt4_table。现在我在合并 4 个数据集时遇到了麻烦。

data final_table;
    set attempt1_table - attempt&max_attempts._table;
run;

输入的数据文件每次都会有一个不同的max_n,所以我使用宏来解决这个问题。

    标签: syntax sas macros sas-macro


    【解决方案1】:

    仅当数字位于数据集名称的末尾时,- 快捷方式才有效。将您的数据集重命名为 round_table1round_table2 等:

    data final_table;
        set round_table1 - round_table&max_n.;
    run;
    

    【讨论】:

    • 谢谢,但我仍然遇到同样的错误。 (注意:由宏变量“MAX_N”生成的行。round_table 4 错误:编号数据集列表(WORK.round_table1-WORK.round_table)上缺少数字后缀。错误 22-322:语法错误,需要以下之一:名称,带引号的字符串,(, ;, CUROBS, END, INDSNAME, KEY, KEYRESET, KEYS, NOBS, OPEN, POINT,数据,最后的,无效的.错误 200-322:符号无法识别,将被忽略。)日志中的尝试表和 4 之间有很多空格,所以可能是这样?
    • 创建宏变量时不要在宏变量中添加空格。如果您使用 SQL,请确保包含 TRIMMED 关键字。或者只是通过重新创建宏变量来删除它们。 %let max_n=&max_n; 将删除多余的空格。
    【解决方案2】:

    使用into :macrovar 子句的trimmed 选项来删除导致set attempt1_table - attempt&max_attempts._table; 解析为错误语法的前导空格。

    例子:

    proc sql noprint;
      select <computation-for-max-attempts>
      into :max_attempts trimmed /* removes leading spaces when column is numeric */
      from ...
      ;
    quit;
    

    【讨论】:

      【解决方案3】:

      谢谢你们每一个人的帮助!这是两个问题,当使用- 快捷方式和使用trimmed 删除前导空格时,数字必须位于数据集名称的末尾。

      proc sql feedback;
          select max(max_attempts)
              into: max_attempts trimmed
              from analysis_data;
      quit;    
      
          
      data analysis_table;
          set unknown_table attempt_table1 - attempt_table&max_attempts;
      run;
      

      【讨论】:

        猜你喜欢
        • 2022-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-19
        • 1970-01-01
        • 2014-07-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多