SAS:导入包含不同日期格式的列的Excel文件(xlsx)

SAS:导入包含不同日期格式的列的Excel文件(xlsx),excel,sas,Excel,Sas,我在SAS中导入数据时遇到问题 我有一列包含不同的日期格式: 01/01/2018 19:00:45 01/02/2018 18:00:36 01/MAY/2019 06:05:55 PM ... SAS不会导入所有: . . 01MAY2019 我甚至认为我使用了以下代码: PROC IMPORT OUT= work.DONN2 DATAFILE= "&path_input\TOTO.xlsx" DBMS=EXCEL ;

我在SAS中导入数据时遇到问题

我有一列包含不同的日期格式:

01/01/2018 19:00:45
01/02/2018 18:00:36
01/MAY/2019 06:05:55 PM
...
SAS不会导入所有:

.
.
01MAY2019
我甚至认为我使用了以下代码:

PROC IMPORT OUT= work.DONN2 
            DATAFILE= "&path_input\TOTO.xlsx" 
            DBMS=EXCEL ;
            SHEET='data';
            GETNAMES=YES;
            MIXED=YES;
            SCANTEXT=YES;
            USEDATE=NO;
            SCANTIME=NO;
RUN;

谢谢您的帮助。

我不确定在使用PROC导入Excel文件时是否有选择格式的选项。我的解决办法是解决这个问题

如果可以打开Excel工作表并导出为CSV,那么使用两个数据步骤就可以得到所需的内容。 作为一个例子,我假设有一个csv格式的文件,它在您的计算机上的某个地方有以下数据

Date, NumberOfPatients, Survived
01/01/2018 19:00:45,23,22
01/02/2018 18:00:36,55,55
01/MAY/2019 06:05:55 PM,34,32
01/JUN/2019 06:05:55 PM,32,29
因此,您可能需要读取上面转换的CSV文件。在第一次通过时,它不会以正确的格式读取。这里唯一的技巧是将日期列的长度设置为23个字符。在此之后,您创建了一个名为Temp的临时数据,然后按照下面的步骤进行第二次数据传递,以获得名为Want的数据集。请注意两种转换:首先是通用的anydtm,然后是DATEAMPM转换。按照下面的方法做这些事情,你会得到你想要的

DATA Temp;
    LENGTH Date $23;
    INFILE "NameAndPathOfTheFile.csv" DLM="," FIRSTOBS=2;
    INPUT Date NumberOfPatients Survived;
RUN;

DATA Want;
    SET Temp;
    NewDate = INPUT(Date,ANYDTDTM23.);
    FORMAT NewDate DATEAMPM23.;
    DROP Date;
    RENAME NewDate=Date;
RUN;
现在,数据的格式应该正确,您可以对datetime类型的变量执行所有允许的操作。 如果您对上面创建的Want数据集进行PROC PRINT,您应该看到如下内容


在Excel中,第三个单元格是自定义格式的日期值还是文本格式的单元格?您是从Excel导入还是从文本文件导入?Richard,该列有两种格式:个性化格式和标准格式。Dirk Horsten,我导入Excel文件(xlsx)您最好的选择是将文件转换为CSV,将其作为字符读入,然后使用几个IF/then语句在SAS中转换。或者您可以尝试使用PCFILES引擎使用dbastype,但我怀疑这不值得。这是一次性的,还是你需要把它变成一个可重复的过程。