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