如何修改SAS代码,解决宏变量日期格式转换报错问题?
解决SAS宏变量日期格式化问题
错误原因
你使用的format date_version date9.;是针对SAS数据集变量的格式化语句,但date_version是通过into:生成的宏变量(属于宏语言层面的文本变量),单独执行这条语句会触发语法错误。
两种可行的解决方法
方法1:在Proc SQL中直接格式化后存入宏变量
使用SAS的put()函数,在查询时就把日期数字转换成指定格式的字符串,再存入宏变量:
proc sql; select put(max(a_date_field), date9.) into :date_version from "/some_linux/sas_data_file"; quit; %put the date is &date_version;
执行后&date_version会直接存储类似01JAN2057的可读日期字符串,%put可直接输出。
方法2:在%put中通过宏函数格式化输出
如果需要保留宏变量中的原始日期数字,可在%put语句里用%sysfunc()调用putn()函数进行格式化:
proc sql; select max(a_date_field) into :date_version from "/some_linux/sas_data_file"; quit; %put the date is %sysfunc(putn(&date_version, date9.));
%sysfunc()用于在宏语言中调用SAS函数,putn()会把宏变量中的数字(SAS日期值)转换成date9.格式的可读字符串。
补充说明
SAS日期本质是从1960年1月1日开始计算的天数,你得到的20870对应的就是01JAN2057(date9.格式)。
内容的提问来源于stack exchange,提问作者Chuck
相关产品推荐
相关产品推荐

