3.5 读取Flat数据文件

Flat file最常见的格式就是CSV和TXT文件。同样,按照表3-1介绍的思路,对于纯文本文件,我们仍然推荐用PROC IMPORT方式导入,当然也可以用INFILE语句+INPUT语句组合,进行更多个性化的读入。

→3.5.1 读入CSV文件

CSV文件的读入同EXCEL文件类似,我们也推荐用PROC IMPORT,不过比EXCEL方便的是:CSV在读入时SAS可以直接用GUESSINGROWS来指定通过前多少行确定变量类型、用DATAROW来指定数据从哪一行开始。

程序3-5 PROC IMPORT读入CSV文件

    filename mycsv "D:\03 Writting\01 SAS编程演义\02 Data\Raw\class.csv";
    proc importout=tmp datafile=mycsv
                dbms=csv replace;
                getnames=yes;
                guessingrows=20;
                datarow=2;
    run;

CSV文件其全称是逗号分隔值文件(Comma Separated Value,CSV),虽然我们常用MS EXCEL打开查看编辑其内容,用记事本打开,便见其本质内容就是用逗号把一个一个的变量值分开。如果我们不用逗号,改用空格或者制表符,那就是我们常见的TXT文本文件了。

→3.5.2 读入TXT特殊字符分隔的文件

对于TXT文件,我们同样先推荐用PROC IMPORT导入,不同的是,我们在设置DBMS时要留意:我们需要指定DBMS=DLM,并且增加DELIMITER语句指定分隔符。例如,如果分隔符是“#”,则delimiter='#';如果是空格或者制表符,则用二进制代码表示空格('20'x)和制表符('09'x)。

程序3-6 PROC IMPORT导入制表符和空格分隔的文本

当然,除了PROC IMPORT外,我们也可以采用更为灵活的方式,那就是DATA步的INFILE+INPUT语句。其实,无论是CSV还是TXT,我们在用PROC IMPORT导入的时候,SAS实质上还是在用DATA步的INFILE+INPUT语句,图3-2可以证明。在运行完上面的程序后,留意LOG就会发现这一点。这一点有一个巧妙的用途:如果我们用PROC IMPORT导入时,某些变量因格式、长度什么的不对而出现错误了,我们可以直接拷贝LOG里的DATA步程序,而后进行细微修改,用修改后的DATA步程序再导入文本数据文件,这样不失为一个巧妙的读入文本文件的方法。

图3-2 PROC IMPORT导入文本实质是DATA步INFILE+INPUT语句