在SAS Grid中导入Excel并添加文件最后修改时间至表时遇语法错误
问题解决:SAS宏中添加文件修改时间戳至表的语法错误
错误原因
宏变量&ModifyDT解析后是字符形式的时间戳(如09May2023:16:33:19),直接放入SELECT语句时,SAS会将其视为无效标识符而非字符串常量,因此触发语法错误。
解决方案
需要将宏变量值包裹为字符串常量,再通过INPUT()函数转换为SAS可识别的日期时间数值,并指定显示格式。
修改后的完整代码
%macro FileAttribs(filename); %local rc fid fidc ModifyDT; %let rc=%sysfunc(filename(onefile,&filename)); %let fid=%sysfunc(fopen(&onefile)); %if &fid ne 0 %then %do; %let ModifyDT=%sysfunc(finfo(&fid,Last Modified)); %let fidc=%sysfunc(fclose(&fid)); %let rc=%sysfunc(filename(onefile)); %put NOTE- Last modified &modifydt; proc sql; create table work.final as select *, input("&modifydt", datetime20.) as lastmodified format=datetime20. from work.tb; -- 从Excel导入的表 quit; %end; %else %put &filename could not be open.; %mend FileAttribs;
关键修改点说明
- 包裹宏变量为字符串常量:用双引号
"&modifydt"将宏变量值包裹,让SAS识别为字符型输入。 - 转换为SAS日期时间数值:使用
INPUT()函数,指定datetime20.格式(匹配DDMONYYYY:HH:MM:SS的时间戳格式),将字符转换为SAS内部的日期时间数值(以1960年1月1日为起点的秒数)。 - 指定显示格式:通过
format=datetime20.确保新列lastmodified以可读的时间戳格式展示。
内容的提问来源于stack exchange,提问作者yang chaoyi
相关产品推荐
相关产品推荐

