【问题标题】:SAS : import Excel file (xlsx) with colum containing different date formatsSAS:使用包含不同日期格式的列导入 Excel 文件(xlsx)
【发布时间】:2019-07-23 01:08:52
【问题描述】:

我在将数据导入 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;

感谢您的帮助。

【问题讨论】:

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

标签: excel sas


【解决方案1】:

我不确定在对 Excel 文件使用 PROC IMPORT 时是否可以选择格式。我的解决方案是解决这个问题。

如果您可以打开 Excel 工作表并导出为 CSV,然后使用两个 DATA 步骤,您就可以获得您想要的。 例如,我假设有一个 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 的临时数据,然后执行如下所示的第二次 DATA 步骤,以获取名为 Want 的数据集。请注意两个转换:首先是通用 ANYDTDTM,然后是 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;

现在数据应该是正确的格式,您可以对日期时间类型的变量进行所有允许的操作。 如果您对上面创建的 Want 数据集执行 PROC PRINT,您应该会看到如下内容。

The Date column is in correct format in this picture

【讨论】:

    猜你喜欢
    • 2017-10-01
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 2017-04-10
    相关资源
    最近更新 更多