SAS 读取原始数据


SAS 可以从各种来源读取数据,其中包括多种文件格式。下面讨论 SAS 环境中使用的文件格式。

  • ASCII(文本)数据集
  • 分隔数据
  • Excel 数据
  • 分层数据

读取 ASCII(文本)数据集


这些是包含文本格式数据的文件。数据通常由空格分隔,但 SAS 也可以处理不同类型的分隔符。让我们考虑一个包含员工数据的 ASCII 文件。我们使用 Infile SAS 中可用的语句。

例子

在下面的示例中,我们读取名为 emp_data.txt 从当地环境。

data TEMP; 
    infile
    '/folders/myfolders/sasuser.v94/NewbieGo/emp_data.txt';
    input empID empName $ Salary Dept $ DOJ date9. ;
    format DOJ date9.;
    run;
    PROC PRINT DATA = TEMP;
RUN;

当执行上述代码时,我们得到以下输出。

read_raw_data1

读取分隔数据


这些是数据文件,其中列值由逗号或管道等分隔符分隔。在这种情况下,我们使用 dlm 中的选项 infile 陈述。

例子

在下面的示例中,我们从本地环境中读取名为 emp.csv 的数据文件。

data TEMP; 
    infile
    '/folders/myfolders/sasuser.v94/NewbieGo/emp.csv' dlm=",";
    input empID empName $ Salary Dept $ DOJ date9. ;
    format DOJ date9.;
    run;
    PROC PRINT DATA = TEMP;
RUN;

当执行上述代码时,我们得到以下输出。

read_raw_data1

读取 Excel 数据


SAS 可以使用导入工具直接读取 excel 文件。正如在 SAS 数据集一章中所见,它可以处理包括 MS excel 在内的多种文件类型。假设文件 emp.xls 在 SAS 环境中本地可用。

例子

FILENAME REFFILE
"/folders/myfolders/NewbieGo/emp.xls"
TERMSTR = CR;

PROC IMPORT DATAFILE = REFFILE
DBMS = XLS
OUT = WORK.IMPORT;
GETNAMES = YES;
RUN;
PROC PRINT DATA = WORK.IMPORT RUN;

上面的代码从 excel 文件中读取数据,并给出与上述两种文件类型相同的输出。

读取分层文件


在这些文件中,数据以分层格式呈现。对于给定的观察,有一个标题记录,下面提到了许多详细记录。详细记录的数量可能因一个观察结果而异。下面是分层文件的图示。

在下面的文件中,列出了每个部门下每个员工的详细信息。第一条记录是提到部门的标题记录,下一条记录以 DTLS 开头的几条记录是详细信息记录。

DEPT:IT 
DTLSSAS 可以从各种来源读取数据,其中包括多种文件格式。下面讨论 SAS 环境中使用的文件格式。Rick:623 
DTLS分隔数据Mike:611 
DTLS读取 ASCII(文本)数据集Tusar:578 
DEPT:OPS
DTLS这些是包含文本格式数据的文件。数据通常由空格分隔,但 SAS 也可以处理不同类型的分隔符。让我们考虑一个包含员工数据的 ASCII 文件。我们使用Pranab:632
DTLSASCII(文本)数据集Dan:452
DEPT:HR
DTLSExcel 数据Ryan:487
DTLSASCII(文本)数据集Siyona:452

例子

要读取分层文件,我们使用下面的代码,其中我们使用 IF 子句标识标题记录,并使用 do 循环来处理详细信息记录。

data employees(drop = Type);
    length Type $ 3  Department
        empID $ 3 empName $ 10 Empsal 3 ;
    retain Department;
    infile
    '/folders/myfolders/NewbieGo/empdtls.txt' dlm = ':';
    input Type $ @;
    if Type = 'DEP' then
        input Department $;
    else do;
        input empID  empName $ Empsal ;
        output;
    end;
run;

    PROC PRINT DATA = employees;
RUN;

当执行上述代码时,我们得到以下输出。

read_heirarchial_data2