我有一个来自Excel的文件,该文件的日期格式很短,但是当SAS读取它时,它将其变成4000范围内的数字...当我尝试转换此时,到以下公式的excel日期,它将一年变成2077年...是否有一个公式来确保此日期保持在读入的原始格式,或者避免将其变成根本不是的4000范围靠近我的文件开始的2017年和2018年。这是否有意义?
data change_date;
format Completed_Date mmddyy8. ;
set check;
completed_date = date_completed;
if 42005 => date_completed >=43466 and date_completed ^=. then
Completed_date = Date_Completed-21916; *commented out 12-21-17 Xalka
dates back to how they are expected;
run;
我很确定这是一个重复的问题,但是我找不到它。
这通常是由在同一列中混合字符和日期值引起的。这使SAS导入数据作为字符变量,并导致将实际日期复制为Excel用于存储日期的整数的字符版本。
通常,这是由看起来像日期但实际上是Excel文件中的字符串的条目引起的。修复它的最佳方法是修复Excel文件,以便列仅包含日期。否则,您只需要将字符串转换为整数并调整值以说明索引日期的差异。
因此,如果您的值位于字符变量DATESTRING
中名为HAVE
的SAS数据集中,则可以使用此数据步骤创建具有实际日期值的新变量。
data want ;
set have ;
if indexc(datestring,'-/') then date=input(datestring,anydtdte32.);
else date = input(datestring,32.) + '01JAN1900'D -2;
format date yymmdd10. ;
run;
负2是因为是否开始使用1或0编号,而Excel认为1900是Leap年。
excel和SAS在后端有不同的默认日期。SAS的第0天是1960年1月1日,Excel的第0天是1900年1月1日。因此,您需要使用以下公式将Excel数字日期转换为SAS日期。sas_date = excel_date -21916;
data dateExample;
informat dt mmddyy8.;
set dates;
SAS_date = dates - 21916;
dt=sas_Date;
format dt date9.;
run;