SAS如何识别Linux目录下符合MMDDYYYY等日期格式的文件夹
SAS实现文件夹名称日期格式校验指南
核心实现逻辑
- 第一步:过滤非8位纯数字的文件夹名,直接排除不满足基础长度和字符要求的条目
- 第二步:使用SAS日期输入函数配合
??修饰符校验两种日期格式,该修饰符可以避免解析失败时抛出错误日志和无效数据提示 - 第三步:生成标记变量区分合法格式类型,方便后续处理
完整代码示例
data folder_with_date_flag; set folderonly; /* 初始化标记变量 */ length date_type $20; date_type = "非法日期格式"; is_valid_date = 0; /* 第一步:先判断是否为8位纯数字 */ if length(fname) = 8 and anyalpha(trim(fname)) = 0 then do; /* 校验YYYYMMDD格式 */ dt_ymd = input(fname, ?? yymmdd8.); if not missing(dt_ymd) then do; date_type = "YYYYMMDD"; is_valid_date = 1; end; /* 校验MMDDYYYY格式,若已经匹配YYYYMMDD可根据需求调整是否跳过校验 */ else do; dt_mdy = input(fname, ?? mmddyy8.); if not missing(dt_mdy) then do; date_type = "MMDDYYYY"; is_valid_date = 1; end; end; /* 可根据需要保留解析出的日期值,调整为你需要的日期格式即可 */ format dt_ymd dt_mdy yymmdd10.; end; run;
结果说明
- 变量
is_valid_date为1时代表该文件夹名是合法日期格式,为0代表非合法格式 - 变量
date_type会标记具体的合法格式类型,可直接作为后续处理规则的判断条件 - 若存在极少数同时符合两种格式的特殊值(比如12122024,按MMDDYYYY是2024年12月12日,按YYYYMMDD是1212年12月20日),可自行调整两种格式的校验顺序来匹配业务优先级
内容的提问来源于stack exchange,提问作者StickyRoll
相关产品推荐
相关产品推荐

