个性化阅读
专注于IT技术分析

在SAS中读取原始数据图解

本文概述

在上一个主题中, 我们学习了如何在SAS编程中合并数据集。现在, 我们将学习SAS的读取能力, 以及如何从各种文件中读取原始数据。我们还将学习输入一些特殊类型的数据值。

如前所述, 原始数据文件是SAS临时存储的, 用于执行程序的文件。在SAS中, 我们可以从许多类型的文件中读取原始数据, 例如文本, excel, CSV层次结构等。

SAS的阅读能力

1.读取空格分隔的值

由空格分隔的数据值通常称为列表。每个值一个或多个空格分隔。如果缺少值, 则应由占位符指向它们, 例如点(。)或句号或句点。

请注意, 点(。)用于指示数字或字符变量的缺失值。

例如:

data student;  
input roll name$ game$ age weight height$;  
datalines;  
1 Anuj football . 64 161  
5 lata tennis 23 60 155  
2 Vinita badminton 30 65 . 
7 Kumar football 29 . .  
4 Anita tennis 29 65 153  
3 Tarun football 21 70 162  
6 preeti badminton 24 57 157  
;  
run;    
proc print data=student;  
run;
在SAS中读取原始数据

输出

在SAS中读取原始数据

从输出中可以看到, 每个用空格分隔的值都在创建一个列表。我们在缺失值的位置提供了点(。), SAS也在读取缺失值的地方。

2.如何输入流内数据

我们可以通过两种方式向SAS提供读取数据的方式, 一种是在数据太大时从外部文件读取数据, 而不是键入数据, 但是当数据太小时, 在SAS程序中键入数据很方便而不是从外部文件读取它。它被称为流内数据。这是在SAS中输入数据的快速方法。

要输入此类数据, 你将需要4种基本类型的语句:

  • 数据
  • 输入值
  • 卡或数据线
  • 一条线上的分号

数据值之间必须至少有一个空格, 但是我们也可以提供多个空格。即使值丢失, 每个变量也必须具有占位符。句点(。)表示以这种方式输入的字符和数字变量都缺少值。无需在列中精确对齐数据。

例如:

data salary;
input name $ id sex $ salary age;
cards;
Sumit 120 M  .     .
Kiran 135 F 55000 40
Bunty 126 . 48000 45
Anita 134 F 37800 33
Varun 162 M 69000 60
;
proc print data=salary;
run;

输出

在SAS中读取原始数据

你可以在输出中看到, 数据已经以表格形式输入。

3.在同一行输入多个案例的数据

在SAS中, 在某些情况下, 我们可以使用@@在同一行上输入原始数据。

例如:

data demo;
input a b group @@;
cards;
1 2 AB 6 17 AB 13 28 CD 14 34 CD 16 54 EF 18 23 EF
21 21 GH 34 29 GH 19 20 IJ 56 57 IJ 42 92 KL 67 78 KL
;
proc print data=test;
run;

在SAS Studio中执行此代码时, 将获得以下输出, 表明已输入数据:

在SAS中读取原始数据

输出

在SAS中读取原始数据

我们可以在输出中看到, 在几种情况下已经输入了数据。

从外部文件读取数据

在SAS中, 当数据太大时, 请从外部文件读取而不是键入。我们可以从许多不同的来源读取数据, 例如从数据库程序, 电子表格程序或excel等导出的数据。

为此, 首先, 确保你应该了解原始数据文件的特征。你可以使用文本编辑器或文字处理程序读取和检查原始数据。

对于小文件, 可以使用Windows记事本, 对于大文件, 可以使用Microsoft Word或Word Perfect。但是请确保如果使用文字处理程序打开原始数据文件, 则可以打开仅另存为文本的文件。

你将需要一本密码本来读取原始数据文件。该代码簿提供有关文件中包含的数据的信息。一些常用的原始数据文件类型是:

  1. 以空格分隔的值:它包含列表形式的数据。
  2. 逗号分隔值:通常来自Excel, 文件扩展名为.csv。
  3. 制表符分隔的值:这是一种文本文件(.txt文件), 来自许多不同的应用程序, 包括Excel。
  4. 固定列数据:这是一种包含信息性数据的形式。

要从文件读取原始数据, 数据步骤必须包括以下3条基本语句:

  1. 数据
  2. 档案中
  3. 输入值

我们可以在数据步骤中添加其他语句来创建新变量, 重新编码变量并执行数据转换。

读取文件的语法

SAS数据步骤非常简单, 可以读取SAS中的原始数据。 DATA语句提供创建数据集的名称, infile语句指示读取原始数据文件。

例如:

data test;           /* test is a dataset */ 
infile in;           /* in is a raw data file */ 
input @1 Name $10.   /* read a record */ 
@20 Age 2. ;         /* with two fields */ 
run;                 /* end of step */

你可以在示例中看到, 测试是由DATA语句创建的数据集, INFILE用于读取原始数据文件, 即in。Input语句列出了要按原始数据文件相同顺序读取的变量。

如何控制阅读过程?

在SAS中, 我们可以使用循环来控制数据读取。你不能在变量列表的开头跳过任何变量, 但是可以在到达列表末尾之前停止读取变量。

例如:

data _null_;          /* don't need dataset*/
 infile in;           /* raw file in */ 
input  @1 Name $10;   /* read a record */
 list;                /* list buffer in log*/
 if _n_ > 30 then     /* stop after 30, adjust as needed */ 
stop;                 /* stop */
 run;                 /* end of step */

从示例中可以看到, 当索引超过30时, 可以停止阅读。

1.从文本文件(.txt文件)读取

包含文本格式数据的文件称为文本文件。通过保存扩展名为.txt的数据来生成这种类型的文件。这些文件的数据由空格定界, 但是也可以由SAS处理各种定界符。让我们通过一个示例来了解SAS如何使用infile语句读取文本文件。

例如:

Data student;
infile 'C:/Users/ajeetraman/Documents/OfficeWork/student_data.txt ' dlm= ' , ' firstobs=2 dsd;
input roll name sex;
run;
proc print data=student;
run;

输出

在SAS中读取原始数据

2.从逗号分隔的值(.csv文件)中读取

由逗号或管道分隔的原始数据值称为CSV(逗号分隔值)。要读取此类文件, 请在infile语句中使用定界符或缩写dlm。

例如:

Data test;
infile 'C:/Users/ajeetraman/Documents/OfficeWork/student_data.csv' dlm=', ' firstobs=2 dsd;
input roll name sex;
run;
proc print data=test;
run;

其中

  • delimiter =”, “或dlm =”, “表示在原始数据文件中使用逗号分隔值。
  • firstobs:告诉行号(firstobs = 2), 从SAS可以开始读取原始数据文件。这是实际值开始的行。
  • dsd:指示SAS读取连续逗号作为缺失值。

输出

在SAS中读取原始数据

3.从Excel文件(.xls)读取

包含excel格式数据的文件称为excel文件。这些类型的文件是通过保存扩展名为.xls的数据生成的。考虑以下示例:

Data student;
infile 'C:/Users/ajeetraman/Documents/OfficeWork/student_data.xls ' dlm= ' , ' firstobs=2 dsd;
input roll name sex;
run;
proc print data=student;
run;

上面的代码用于从excel文件读取数据, 并以表格形式给出数据值。

在SAS中读取原始数据

4.从分层文件读取

在分层文件中, 数据以分层格式表示。这些类型的文件包含观察结果;记录的数量可能因观察而异。以下是分层文件的示例。

在下面的文件中, 列出了每个分支下每个学生的详细信息。分支的名称将被视为变量或列, 并被记录为观察值或行。为了阅读代码, 我们使用下面的代码, 在其中可以使用IF识别变量记录, 并使用循环获取观察结果。

例如:

Data student (drop = type);
Length Type $ 3 Branch 
enrolment$ 2 stdname$ 2 subject 4;
retain Branch 
infile 'C:/Users/ajeetraman/Documents/OfficeWork/student_data.xls ' dlm= ':';
input Type $ @;
if Type= 'Brnch' then input Branch $;
else do;
input enrolment 2 stdname$ 2 subject$ 4;
output;
end;
run;

上面的代码用于从excel文件读取数据, 并以表格形式给出数据值。


赞(0) 打赏
未经允许不得转载:srcmini » 在SAS中读取原始数据图解
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏