在SAS中读取原始数据图解

本文概述

  • SAS的阅读能力
  • 从外部文件读取数据
  • 如何控制阅读过程?
  • 4.从分层文件读取
在上一个主题中, 我们学习了如何在SAS编程中合并数据集。现在, 我们将学习SAS的读取能力, 以及如何从各种文件中读取原始数据。我们还将学习输入一些特殊类型的数据值。
如前所述, 原始数据文件是SAS临时存储的, 用于执行程序的文件。在SAS中, 我们可以从许多类型的文件中读取原始数据, 例如文本, excel, CSV层次结构等。
SAS的阅读能力 1.读取空格分隔的值
由空格分隔的数据值通常称为列表。每个值一个或多个空格分隔。如果缺少值, 则应由占位符指向它们, 例如点(。)或句号或句点。
请注意, 点(。)用于指示数字或字符变量的缺失值。
例如:
data student; input roll name$ game$ age weight height$; datalines; 1 Anuj football . 64 1615 lata tennis 23 60 1552 Vinita badminton 30 65 . 7 Kumar football 29 . .4 Anita tennis 29 65 1533 Tarun football 21 70 1626 preeti badminton 24 57 157; run; proc print data=http://www.srcmini.com/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 40Bunty 126 . 48000 45Anita 134 F 37800 33Varun 162 M 69000 60; proc print data=http://www.srcmini.com/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 EF21 21 GH 34 29 GH 19 20 IJ 56 57 IJ 42 92 KL 67 78 KL; proc print data=http://www.srcmini.com/test; run;

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

文章图片
输出
在SAS中读取原始数据图解

文章图片
我们可以在输出中看到, 在几种情况下已经输入了数据。
从外部文件读取数据 在SAS中, 当数据太大时, 请从外部文件读取而不是键入。我们可以从许多不同的来源读取数据, 例如从数据库程序, 电子表格程序或excel等导出的数据。
为此, 首先, 确保你应该了解原始数据文件的特征。你可以使用文本编辑器或文字处理程序读取和检查原始数据。
对于小文件, 可以使用Windows记事本, 对于大文件, 可以使用Microsoft Word或Word Perfect。但是请确保如果使用文字处理程序打开原始数据文件, 则可以打开仅另存为文本的文件。
【在SAS中读取原始数据图解】你将需要一本密码本来读取原始数据文件。该代码簿提供有关文件中包含的数据的信息。一些常用的原始数据文件类型是:
  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=http://www.srcmini.com/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=http://www.srcmini.com/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=http://www.srcmini.com/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文件读取数据, 并以表格形式给出数据值。

    推荐阅读