在 SAS 中读取原始数据

2025年3月17日 | 阅读 7 分钟

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

正如我们之前讨论的,原始数据文件是 SAS 为执行程序而临时存储的文件。在 SAS 中,我们可以从多种类型的文件中读取原始数据,如文本、Excel、CSV 分层等。

SAS 的读取能力

1. 读取空格分隔的值

数据值之间用空格分隔,通常称为列表。一个或多个空格分隔每个值。如果存在缺失值,应使用占位符(如点 (.) 或句号或句点)指出。

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

例如

Read Raw Data in SAS

输出

Read Raw Data in SAS

正如您在输出中看到的,每个用空格分隔的值都在创建一个列表。我们用点 (.) 来表示缺失值,SAS 也会将其读取为缺失值。

2. 如何输入内联数据

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

要输入这种类型的数据,您需要 4 种基本类型的语句

  • 数据
  • 输入
  • Cards 或 data lines (数据行)
  • 行尾分号

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

例如

输出

Read Raw Data in SAS

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

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

在 SAS 中,我们可以使用 @@ 在同一行输入多个案例的原始数据。

例如

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

Read Raw Data in SAS

输出

Read Raw Data in SAS

我们可以在输出中看到,数据已在多个案例中输入。

从外部文件读取数据

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

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

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

您将需要一个代码本才能读取原始数据文件。 该代码本提供有关文件包含的数据的信息。 一些常用的原始数据文件类型是

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

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

  1. 数据
  2. Infile
  3. 输入

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

读取文件语法

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

例如

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

如何控制读取过程?

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

例如

正如您在示例中看到的,您可以停止读取索引,当它超过 30 时。

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

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

例如

输出

Read Raw Data in SAS

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

原始数据值之间用逗号或管道分隔,称为 CSV(逗号分隔值)。 要读取这种类型的文件,请在 infile 语句中使用 delimiter 或简称 dlm。

例如

其中,

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

输出

Read Raw Data in SAS

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

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

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

Read Raw Data in SAS

4. 从分层文件读取

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

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

例如

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