首页 文章

当原始数据混乱时,使用SAS中的信息读取日期

提问于
浏览
1

我本质上是试图使用信息和问题将混乱的数据读入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 import语句

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

它试图使用best32 . 信息,因为第一行中有零 . 无法读入日期 .

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

2 回答

  • 3

    您可以向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
             .
    
  • 0

    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;
    

相关问题