【问题标题】:Reading in dates using informats in SAS when raw data is messy当原始数据混乱时,使用 SAS 中的信息读取日期
【发布时间】:2015-12-23 16:13:32
【问题描述】:

我实际上是在尝试使用信息将杂乱的数据读入 SAS 并遇到问题。我在原始 txt 文件中有以下形式的数据列,例如:

RegDate
0
0
16/10/2002
20/11/2003
0

对于 RegDate,0 = 缺失,否则存在日期。我想将这些数据读入 SAS,将“NA”作为零,将日期作为日期,然后输出到数据集中。

如果所有日期都存在,我可以使用代码

data test;
      %let _EFIERR_ = 0; /* set the ERROR detection macro variable */
      infile "&pathlocation" delimiter='09'x
        MISSOVER DSD firstobs=2 ;
        informat RegDate ddmmyy10. ;
        format RegDate ddmmyy10. ;
        input
         RegDate;
      if _ERROR_ then call symputx('_EFIERR_',1);  /* set ERROR detection macro     variable */
run;

但是我无法读取上面的文本文件,因为它没有考虑零,因为信息设置为读取日期。

如果使用 proc 导入语句

proc import datafile="&pathlocation" out=test dbms=tab replace;
run;

它尝试使用 best32。信息,因为第一行有一个零。然后无法读取日期。

所以我需要创建某种自定义格式。我可以单独为数字信息或单独的字符信息或图片信息(日期需要?)执行此操作。我无法弄清楚如何为一个变量组合多种格式。我确信解决方案非常简单,但是我无法在网上找到它,所以如果这很明显,我深表歉意。有没有一种方法可以 a) 将一些 IF-THEN 语句放入格式中,以便它根据输入执行不同的操作 b) 以纯文本形式读取数据,以便需要使用格式。

【问题讨论】:

    标签: format sas raw-data informat


    【解决方案1】:

    NA 是文本,在 SAS 中无效 - 它们在 R 中使用。为了表示数值变量缺少值,SAS 使用句点 (.)。使用您的代码读取数据会将 0 分配给缺失,这将是对数据的适当读取。

    如果您想要 NA,您需要读取数据或将数据转换为文本,但是您的日期将是文本,并且您可以使用它们执行的操作会受到限制,例如无法计算日期。

    如果你真的想要,你可以使用嵌套格式来显示它。

    proc format;
    value na_date_fmt
    low-high = [ddmmyy10.]
    . = "NA";
    run;
    
    
    data have;
    infile cards dsd;
    informat regDate ddmmyy10.;
    format regDate ddmmyy10.;
    format newDate na_date_fmt.;
    input regdate;
    newDate=regdate;
    cards;
    0
    0
    16/10/2002
    20/11/2003
    0
    ;
    run;
    
    proc print data=have;
    run;
    

    【讨论】:

      【解决方案2】:

      您可以在 DATA 步中添加 IF 语句,如下所示:

      data test;
        infile "&pathlocation" delimiter='09'x
          MISSOVER DSD firstobs=2 ;
          informat RegDate ddmmyy10. ;
          format RegDate ddmmyy10. ;
          input 
             RegDate;
          if RegDate = 0 then RegDate = .;
      run;
      

      输出是

         RegDate
               .
               .
      16/10/2012
      20/11/2003
               .
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-16
        • 1970-01-01
        • 2019-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-23
        相关资源
        最近更新 更多