SAS中%window输入含单引号内容时避免报错并捕获值的方法
解决SAS交互窗口输入含单引号内容的报错问题
问题根源在于宏处理器解析&study_code时,会把输入的单引号当作宏语法的字符串边界,导致不匹配报错。要完整捕获含单引号的输入,需绕过宏直接解析,改用DATA步函数读取变量值。
修改后的代码如下:
%let study_code=; %macro startme ; %global study_code study_code_new; %window first #3 @45 'Electronic Filing System' color=blue //// @20 'Study code:' color=black +2 study_code 30 color=green required=yes attr=underline // @10 '**************** Hit ENTER to begin ******************' color=green ; %display first ; /* 改用DATA步读取宏变量,避免宏解析单引号 */ data _null_; /* 用SYMGET直接获取study_code的字面值,包括单引号 */ temp = strip(symget('study_code')); /* 将处理后的值存入全局宏变量study_code_new */ call symputx('study_code_new', temp, 'g'); run; %put 捕获到的输入值:&study_code_new.; /* 可添加判断逻辑提示用户输入错误 */ %if index(&study_code_new., "'") > 0 %then %do; %put ERROR: 输入内容包含非法单引号,请重新输入!; %end; %mend; %startme;
关键改动说明
- 新增
study_code_new为全局宏变量,确保DATA步赋值后能在宏中调用 - 用DATA步的
symget函数读取study_code的字面值,该函数不会触发宏语法解析,能完整保留输入的单引号 - 用
call symputx将处理后的值存入全局宏变量,替代原有的%let语句 - 可通过
index函数判断输入是否包含单引号,输出针对性错误提示
输入含单引号的内容(如123')时,日志会正常输出捕获到的值,并触发错误提示,不会导致宏终止。
内容的提问来源于stack exchange,提问作者kiwidude89
相关产品推荐
相关产品推荐

