使用SAS宏验证表名仅含字母与下划线的实现需求
SAS宏实现表名合法性校验
下面是一个贴合需求的SAS宏,专门用来检查表名是否仅由英文字母(大小写均可)和下划线组成,遇到非法字符(数字、空格、字母数字混合、纯数字等)时会触发报错,还能选择报错后是终止流程还是继续执行。
%macro check_table_name(table_name, action=ABORT); /* 定义正则规则:仅匹配字母(大小写)和下划线,且覆盖整个字符串 */ %let regex = ^[A-Za-z_]+$; /* 调用PRXMATCH执行正则匹配 */ %let match_result = %sysfunc(prxmatch(®ex, &table_name)); %if &match_result = 0 %then %do; /* 表名非法,抛出错误提示 */ %put ERROR: 表名*&table_name*不合法!仅允许包含英文字母和下划线。; /* 根据指定动作处理后续流程 */ %if %upcase(&action) = ABORT %then %do; %put ERROR: 已终止流程,请修正表名后重试。; abort abend; %end; %else %if %upcase(&action) = CONTINUE %then %do; %put WARNING: 表名不合法,但已选择继续执行流程,请留意后续风险。; %end; %else %do; %put ERROR: 参数action取值无效,仅支持ABORT或CONTINUE,默认执行ABORT。; abort abend; %end; %end; %else %do; %put NOTE: 表名*&table_name*校验通过,合法。; %end; %mend check_table_name;
宏参数说明
table_name:必填项,传入需要校验的目标表名字符串action:可选项,报错后的执行动作,默认值为ABORT(终止流程),可选值为CONTINUE(继续执行)
使用示例
- 校验合法表名:
%check_table_name(table_name=Fsc_bank); %check_table_name(table_name=bank);
执行后输出:NOTE: 表名*Fsc_bank*校验通过,合法。
- 校验非法表名并终止流程:
%check_table_name(table_name=bank1);
执行后触发报错并终止:
ERROR: 表名*bank1*不合法!仅允许包含英文字母和下划线。 ERROR: 已终止流程,请修正表名后重试。
- 校验非法表名但选择继续执行:
%check_table_name(table_name=bank 2, action=CONTINUE);
执行后输出警告但不终止流程:
ERROR: 表名*bank 2*不合法!仅允许包含英文字母和下划线。 WARNING: 表名不合法,但已选择继续执行流程,请留意后续风险。
补充提示
- 正则表达式
^[A-Za-z_]+$确保了整个表名字符串从开头到结尾只能由字母(大小写)和下划线组成,无其他杂项字符 - 如果需要额外校验SAS表名的长度限制(最长32字符),可以在宏中加入如下判断逻辑:
%if %length(&table_name) > 32 %then %do; %put ERROR: 表名*&table_name*长度超过32字符限制!; %if %upcase(&action) = ABORT %then abort abend; %end;
内容的提问来源于stack exchange,提问作者Gujjar
相关产品推荐
相关产品推荐

