SAS日期导入错误
导入excel工作表时,导入的某些日期与其他日期不同。我试图用下面的代码来修正这个问题,以格式化日期SAS日期导入错误,sas,Sas,导入excel工作表时,导入的某些日期与其他日期不同。我试图用下面的代码来修正这个问题,以格式化日期 DATA volume; SET mice.volume; format Date MMDDYY10.; run; 但是,我收到了以下错误 错误48-59:找不到或无法加载格式$MMDDYY 我还尝试了以下代码 DATA volume; SET mice.volume; If date= 44138 then date= '11/3'; If date= 44141 then date= '1
DATA volume;
SET mice.volume;
format Date MMDDYY10.;
run;
但是,我收到了以下错误
错误48-59:找不到或无法加载格式$MMDDYY
我还尝试了以下代码
DATA volume;
SET mice.volume;
If date= 44138 then date= '11/3';
If date= 44141 then date= '11/6';
run;
注:字符值已在以下位置转换为数值:(行):(列)
Proc Contents显示变量=Date type=Char Len=7 format=$7 Informat=$7 Label=Date
我该如何解决这个问题
日期列是混合了“日期”字符串的字符,Excel日期值数字告诉我Excel中的一些日期值实际上是字符串,例如
'11/10
或='11/10'
原始编号44138
为:
- SAS日期值为2080年11月4日(显然不是想要的)
- Excel日期值
(啊哈!)2020年11月3日
因为SAS日期值为2020年11月3日
22222
- Excel的偏移量为
-21916
- Excel的偏移量为
是SAS日期-21916
1899年12月30日
0
相对应的日期SAS基准年为
1960
,Excel基准年为1900
请注意,往返时间是从1899年12月31日
到1899年12月30日
。这是由于Excel 97因遗留原因而出现的错误造成的。请参阅微软的解释,其中将责任推回到Lotus1-2-3
在系统S1和S2日期编号之间转换的公式是为其他系统的纪元日期(@#0)添加#
发生了什么事
Exceldate
列中的混合值类型强制IMPORT
将date
变量视为字符
- 带有日期字符串m/d的Excel单元格作为字符串引入
- 带有日期的Excel单元格(可能自定义格式为m/d)作为基础Excel日期编号引入
MMDDYY.
应用于字符变量date
。
字符列不能指定数字或日期格式,因此您将获得
ERROR 48-59: The format $MMDDYY was not found or could not be loaded.
SAS自动假定MMDDYY.
表示字符格式$MMDDYY.
,因为变量类型为字符
修复程序
您可以使用以下代码(未测试)转换字符日期
列中的值:
如果要继续在SAS中仅显示mm/dd,请使用NLDATEM5格式。
format date_fixed NLDATEM5.;
首先修复Excel文件会更容易。确保包含日期的列在每个单元格中仅包含日期,或在每个单元格中仅包含字符串。Excel日期通常基于1900年(但可能使用1904年),但SAS使用1960年。要修复添加日期值'30DEC1899'd,这是一个负数。谢谢@Tom,清理了大量的答案。您需要使用309899,因为Excel将1900视为闰年。
ERROR 48-59: The format $MMDDYY was not found or could not be loaded.
if index(date,'/') then
date_fixed = input (trim(date)||'/2020', mmddyy10.);
else
date_fixed = input(date,best12.) + '30-DEC-1899'D;
format date_fixed yymmdd10.;
format date_fixed NLDATEM5.;