SAS Data Integration Studio中varchar转date返回1960年问题咨询
问题根因说明
你得到的01-01-1960是SAS日期类型缺失值的默认展示值,说明你使用的INPUT()函数转换逻辑执行失败返回了空值,并不是转换逻辑主动生成了该日期。
排查&解决步骤
- 第一步:处理源字段无效字符
源字段是varchar类型,大概率存在首尾空格、不可见字符等非预期内容,导致格式匹配失败。可以先对源字段做去空白处理再转换,代码修改为:INPUT(STRIP(TANGGAL_LAHIR), yymmdd10.) - 第二步:使用兼容性更强的输入格式
如果你不能100%确定源字段的分隔符完全统一为/,可以替换为自动识别常见分隔符的ANYDTDTE10.输入格式,适配性更强:INPUT(STRIP(TANGGAL_LAHIR), anydtdte10.) - 第三步:检查目标字段配置
确认SAS DI Studio中目标字段的属性设置正确:- 字段类型为数值型(SAS的日期类型底层为数值,存储的是距1960年1月1日的天数)
- 字段已绑定合法的日期输出格式(如
yymmdd10.、ddmmyy10.等) - 如果直接写入Oracle的DATE类型字段,需确认Oracle库连接的SAS/ACCESS接口配置中,
DATE、DATETIME_CONVERSION等日期相关参数没有设置错误的隐式转换规则。
- 第四步:添加脏数据兜底逻辑
若源表存在不符合YYYY/MM/DD格式的脏数据,可以添加判断逻辑避免转换报错,同时可自定义默认值:/* ??参数可屏蔽转换失败的warning日志 */ IF NOT MISSING(INPUT(STRIP(TANGGAL_LAHIR), ?? yymmdd10.)) THEN target_date_col = INPUT(STRIP(TANGGAL_LAHIR), yymmdd10.); ELSE target_date_col = .; /* 可替换为你需要的默认日期值 */
内容的提问来源于stack exchange,提问作者yan
相关产品推荐
相关产品推荐

