SAS - 读取原始数据



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

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

读取 ASCII(文本)数据集

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

示例

在下面的示例中,我们从本地环境读取名为 **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

读取分隔数据

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

示例

在下面的示例中,我们从本地环境读取名为 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

读取 Excel 数据

SAS 可以使用导入功能直接读取 Excel 文件。如 SAS 数据集章节所示,它可以处理各种文件类型,包括 MS Excel。假设文件 emp.xls 在 SAS 环境中本地可用。

示例

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 文件读取数据,并给出与上述两种文件类型相同的输出。

读取分层文件

在这些文件中,数据以分层格式存在。对于给定的观测值,在其下方会有许多详细记录。详细记录的数量可能因观测值而异。下面是分层文件的示例。

在下面的文件中,列出了每个部门下每个员工的详细信息。第一条记录是标题记录,其中提到了部门,接下来的几条以 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

示例

要读取分层文件,我们使用以下代码,其中我们使用 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
广告