美文网首页SAS学习笔记
SAS学习笔记:data读数据缺失值

SAS学习笔记:data读数据缺失值

作者: RSP小白之路 | 来源:发表于2023-02-23 13:56 被阅读0次
    • 问题:data步使用cards作为输入数据源时,若干个观测的开始有缺失。
    • 试用:使用了infile语句指定数据源为cards以及分隔符;结合cards输入数据时使用相应分隔符,缺失位置空格占位。

    data test2;
        infile cards dlm = ",";
        input a $ b  d $ e $ ;
    cards;
    apple,23,one,Monday,
     , ,two,Tuesday,
     , ,three, Wednesday,
     , ,four, Thursday,
    ;
    run;
    

    • 输出:
      test2输出

    data test3;
        set test2;
        if missing(a) then a = "aaaaa";
        if missing(b) then b = 1000;
    run;
    
    验证缺失值
    • 问题: data步读取数据,若干行结尾缺失值问题
    • 试用: infile语句中的missover选项;
      • missover啥作用,说通俗掉,一个观测由多个变量组成,data步中SAS一行一行读入数据;读到一行结尾了,还有变量没有被赋值,按照SAS data步的读取机制,会继续去下一行读,missover告诉它,到此为止,没赋值的就是缺失值,别去下一行读了;

      • 不加missover选项
    data test4;
        infile cards dlm = "," ;
        input a $ b $  d $ e  ;
    cards;
    one,Monday,apple,23
     two,Tuesday
     three, Wednesday
     four, Thursday
    ;
    run;
    
    • 输出


      test4输出

      可以看到,不是理想的输出结果


      • 加上missover选项
    data test5;
        infile cards dlm = "," missover ;
        input a $ b $  d $ e  ;
    cards;
    one,Monday,apple,23
     two,Tuesday
     three, Wednesday
     four, Thursday
    ;
    run;
    
    • 输出
    test5输出

    可以看到,缺失值正常的呈现。


    • 另说
      • 其实不用missover选项,按照第一个示例用空格占位,也可以;
      • 试用:
    data test6;
        infile cards dlm = ","  ;
        input a $ b $  d $ e  ;
    cards;
    one,Monday,apple,23
     two,Tuesday, , 
     three, Wednesday, , 
     four, Thursday, , 
    ;
    run;
    
      • 输出
    test6输出
      • 说明
        差别就是看你愿意多敲几个分隔符和空格,还是愿意敲missover了,都行。
        如果是一个观测中间某几个变量有缺失值,处理起来差不多,改个分隔符,然后空格占位作为缺失值。
        当然只是讨论这个数据输入问题,实际应用中,直接读入外部数据情况居多,使用cardsdatalines手动输入数据的情况毕竟比较少。所以掌握好infileproc import语句中的若干选项就够用了。

    相关文章

      网友评论

        本文标题:SAS学习笔记:data读数据缺失值

        本文链接:https://www.haomeiwen.com/subject/fjgzkdtx.html