Sas 简明教程

SAS - Read Raw Data

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

  1. ASCII(Text) Data Set

  2. Delimited Data

  3. Excel Data

  4. Hierarchical Data

Reading ASCII(Text) Data Set

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

Example

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

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

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

read raw data1

Reading Delimited Data

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

Example

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

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

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

read raw data1

Reading Excel Data

SAS 可以使用导入工具直接读取 Excel 文件。如在 SAS 数据集章节中看到的那样,它可以处理各种文件类型,包括 MS Excel。假设文件 emp.xls 在 SAS 环境中的本地可用。

Example

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

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

以上的代码从 Excel 文件中读取数据,并给出与以上两个文件类型相同输出。

Reading Hierarchical Files

在这些文件中,数据以层次格式呈现。对于给定的观测值,有一个标题记录,在它下面提到了许多详细记录。详细记录的数量可以从一个观测值到另一个观测值而有所不同。下面是层次文件的说明。

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

DEPT:IT
DTLS:1:Rick:623
DTLS:3:Mike:611
DTLS:6:Tusar:578
DEPT:OPS
DTLS:7:Pranab:632
DTLS:2:Dan:452
DEPT:HR
DTLS:4:Ryan:487
DTLS:2:Siyona:452

Example

为了读取层次文件,我们在下面的代码中使用了 IF 子句来识别标题记录,并使用 DO 循环处理详细记录。

data employees(drop = Type);
   length Type $ 3  Department
      empID $ 3 empName $ 10 Empsal 3 ;
   retain Department;
   infile
   '/folders/myfolders/TutorialsPoint/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