SAS中字符串转日期时宏变量赋值异常问题排查
错误原因
- SAS 宏处理器的核心逻辑是文本替换,默认不会自动执行普通 SAS 数据步函数。你直接在
%let赋值语句中写入input('22Aug2020',date9.)时,宏处理器只会把整段内容当做纯文本存入date宏变量,不会触发函数计算,所以打印时直接输出了函数文本。 - 即使需要在宏环境下调用 SAS 内置函数,也需要使用
%sysfunc宏函数包裹,且需要注意两个宏环境的特殊规则:- 宏环境下的文本不需要加单/双引号包裹,引号会被识别为文本内容的一部分
input函数无法直接被%sysfunc调用,需要根据返回值类型使用对应的inputn(返回数值)或inputc(返回字符)函数
正确实现示例
示例1:获取SAS日期对应的数值存储值
%let date = %sysfunc(inputn(22Aug2020,date9.)); %put &date;
运行后输出:22159,即2020年8月22日对应的SAS日期数值。
示例2:直接获取格式化后的可读日期
%let date = %sysfunc(inputn(22Aug2020,date9.),yymmdd10.); %put &date;
运行后输出:2020-08-22
内容的提问来源于stack exchange,提问作者Pier
相关产品推荐
相关产品推荐

