You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SAS读取datalines日期数据出现'Invalid data'报错咨询

问题原因

列指针整体偏移1位,所有日期字段都被截断读取,因此触发无效数据报错。
逐字符核对datalines内容可以发现:每一行数据开头都多了1个前导空格,input语句中指定@1 Date1 mmddyy10.时,实际读取的是第1-10列的内容 01/03/195(首字符为空格,末尾截断了日期最后一位的0),不属于合法的mmddyy格式日期;后续@12、@23的指针也同步偏移1位,读到的都是带前导空格的截断非法日期值。
另外format语句存在笔误:Date1、Date2后没有指定格式,仅Date3关联了mmddyy10.格式,就算数据读入成功,前两个日期也会显示为SAS内部的数值天数值,而非可读日期格式。

解决方法

两种方案任选其一即可:

方案1:删除datalines前导空格,匹配原有列指针

删掉datalines每行开头的多余空格,让第一个日期从第1列起始,同时修正format语句:

data ThreeDates;
input   @1  Date1 mmddyy10.
        @12 Date2 mmddyy10.
        @23 Date3 date9.;
format  Date1 mmddyy10.
        Date2 mmddyy10.
        Date3 mmddyy10.;

datalines;
01/03/1950 01/03/1960 03Jan1970
05/15/2000 05/15/2002 15May2003
10/10/1998 11/12/2000 25Dec2005
;
run;

方案2:改用列表输入(更稳妥,不易出错)

你的数据本身是空格分隔的标准结构化数据,完全不需要手动指定列起始位置,直接按顺序写入变量和对应读入格式即可,SAS会自动跳过空格分隔符,不会因为多余前导空格、间隔空格数变化触发读取错误:

data ThreeDates;
input Date1 mmddyy10. Date2 mmddyy10. Date3 date9.;
format Date1 Date2 Date3 mmddyy10.;
datalines;
 01/03/1950 01/03/1960 03Jan1970 
 05/15/2000 05/15/2002 15May2003 
 10/10/1998 11/12/2000 25Dec2005 
 ;
run;

两种方案运行后均可正常读入3条记录的全部日期值,不会再出现Invalid data报错。

内容的提问来源于stack exchange,提问作者bandcar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 06:51:07