Excel至SAS不在SAS工作

  • 本文关键字:SAS 工作 不在 Excel sas
  • 更新时间 :
  • 英文 :


我有一个来自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;

最新更新