输出交付系统(ODS)基础入门
立即解锁
发布时间: 2025-08-30 01:12:29 阅读量: 6 订阅数: 10 AIGC 

### 输出交付系统(ODS)基础入门
#### 1. 初始示例与后续方向
首先来看一个传统的 SAS 列表输出示例,这里展示了人员数据,包含了人员的 ID、姓名、工作、所在城市、州、性别、工作代码、薪资、出生日期、入职日期和家庭电话等信息。
| Id | First Name | LastName | City | State | Gender | Job Code | Salary | Birth | Hired | HomePhone |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 1919 | Gerald | Adams | Stamford | CT | M | TA2 | 34376 | 15SEP1948 | 07JUN1975 | 203/781 - 1255 |
| 1653 | Susan | Alexander | Bridgeport | CT | F | ME2 | 35108 | 18OCT1952 | 12AUG1978 | 203/675 - 7715 |
|... |... |... |... |... |... |... |... |... |... |... |
如果想进一步了解 ODS 输出的类型,可以参考相关示例;若要掌握 ODS 的基本概念,可查看相关介绍;若想创建更复杂的 HTML 页面,可了解相关语句和文档;对于 ODS 语句的参考信息,可查阅相关内容;使用 ODS 与 DATA 步骤结合,可添加相关选项;若想对格式化有更多控制,可创建自己的模板。
#### 2. ODS 示例展示
ODS 可以生成多种不同格式的输出,下面为大家展示不同格式的示例。
- **列表输出**:传统的 SAS 输出就是列表输出,无需更改 SAS 程序即可生成。即使同时生成其他更具格式的输出,默认情况下仍会生成这种输出。例如下面是平均季度销售金额按每个销售代表的列表输出:
```plaintext
Average Quarterly Sales Amount by Each Sales Representative
1
--------------------------------- Quarter=1 ----------------------------------
The MEANS Procedure
Analysis Variable : AmountSold
N
SalesRep
Obs
N
Mean
Std Dev
Minimum
Maximum
____________________________________________________________________________
Garcia
8
8
14752.5
22806.1
495.0
63333.7
Hollingsworth
5
5
11926.9
12165.2
774.3
31899.1
Jensen
5
5
10015.7
8009.5
3406.7
20904.8
____________________________________________________________________________
...
```
- **PostScript 输出**:使用 ODS 可以生成 PostScript 格式的输出。
- **HTML 输出**:能生成 HTML 格式的输出,可使用 Internet Explorer、Netscape 或其他支持 HTML 4.0 的浏览器浏览。若要创建 HTML 3.2 输出,需使用 ODS HTML3 语句。
- **RTF 输出**:可生成用于 Microsoft Word 的 RTF 格式输出。
- **PDF 输出**:能生成可使用 Adobe Acrobat 查看的 PDF 格式输出。
- **XML 输出**:生成带有 XML 标签的输出,示例如下:
```xml
<?xml version="1.0" encoding="windows-1252"?>
<odsxml>
<head>
<meta operator="user"/>
</head>
<body>
<proc name="Print">
<label name="IDX"/>
<title class="SystemTitle" toc-level="1">US Census of Population and Housing</title>
<branch name="Print" label="The Print Procedure" class="ContentProcName" toc-level="1">
<leaf name="Print" label="Data Set SASHELP.CLASS" class="ContentItem" toc-level="2">
<output name="Print" label="Data Set SASHELP.CLASS" clabel="Data Set SASHELP.CLASS">
<output-object type="table" class="Table">
<style>
<border spacing="1" padding="7" rules="groups" frame="box"/>
</style>
<colspecs columns="6">
<colgroup>
<colspec name="1" width="2" align="right" type="int"/>
</colgroup>
<colgroup>
<colspec name="2" width="7" type="string"/>
<colspec name="3" width="1" type="string"/>
<colspec name="4" width="2" align="decimal" type="double"/>
<colspec name="5" width="4" align="decimal" type="double"/>
<colspec name="6" width="5" align="decimal" type="double"/>
</colgroup>
</colspecs>
<output-head>
<row>
<header type="string" class="Header" row="1" column="1">
<value>Obs</value>
</header>
<header type="string" class="Header" row="1" column="2">
<value>Name</value>
</header>
<header type="string" class="Header" row="1" column="3">
<value>Sex</value>
</header>
<header type="string" class="Header" row="1" column="4">
<value>Age</value>
</header>
<header type="string" class="Header" row="1" column="5">
<value>Height</value>
</header>
<header type="string" class="Header" row="1" column="6">
<value>Weight</value>
</header>
</row>
</output-head>
<output-body>
<row>
<header type="double" class="RowHeader" row="2" column="1">
<value> 1</value>
</header>
<data type="string" class="Data" row="2" column="2">
<value>Alfred</value>
</data>
... more xml tagged output...
</output-body>
</output-object>
</output>
</leaf>
</branch>
</proc>
</body>
</odsxml>
```
- **Excel 输出**:可生成能用 Excel 查看的表格输出。
#### 3. 常用 ODS 术语
- **数据组件**:类似于 SAS 数据集,包含支持 ODS 的 DATA 步骤或 PROC 步骤的结果(数字和字符)。
- **表定义**:一组描述如何格式化数据的指令,包括列的顺序、列标题的文本和顺序、数据格式、字体大小和字体样式等。
- **输出对象**:包含 DATA 步骤或 PROC 步骤的结果以及如何格式化这些结果的信息。有名称、标签和路径,例如 UNIVARIATE 过程生成的基本统计测量表就是一个输出对象。不过并非所有输出对象都包含格式化指令,有些可能仅由数据组件组成。
- **ODS 目标**:指定生成特定类型输出的目标,支持多种目标,如下表所示:
| 目标类型 | 说明 |
| --- | --- |
| LISTING | 生成传统的 SAS 输出(等宽格式) |
| Markup Family | 使用多种标记语言(如 HTML、XML、LaTeX)格式化 SAS 输出,可通过 Web 浏览器访问。SAS 提供多种标记语言,也可自定义 |
| DOCUMENT | 生成输出对象的层次结构,无需重新运行 PROC 或 DATA 步骤即可生成多种 ODS 输出格式,并能更好地控制输出结构 |
| OUTPUT | 生成 SAS 数据集 |
| Printer Family | 生成适用于高分辨率打印机的输出,如 PostScript、PDF 或 PCL 文件 |
| RTF | 生成适用于 Microsoft Word 的输出 |
#### 4. ODS 工作原理概述
- **SAS 输出组件**:PROC 或 DATA 步骤提供原始数据和包含格式化指令的表定义名称,ODS 对输出进行格式化。可以使用输出交付系统将单个过程和 DATA 步骤的输出格式化为多种形式,而非默认的 SAS 列表输出。其处理流程如下 mermaid 流程图所示:
```mermaid
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(Data Component):::process --> C(Output Object):::process
B(Table Definition):::process --> C
C --> D1(DOCUMENT):::process
C --> D2(LISTING):::process
C --> D3(OUTPUT):::process
C --> D4(HTML):::process
C --> D5(MARKUP):::process
C --> D6(PRINTER):::process
C --> D7(RTF):::process
D1 --> E1(Document Output):::process
D2 --> E2(Listing Output):::process
D3 --> E3(SAS Data Set):::process
D4 --> E4(HTML3.2 Output):::process
D5 --> E5(SAS TAGSETS/User - defined TAGSETS):::process
D6 --> E6(PS/PCL/PDF):::process
D7 --> E7(RTF Output):::process
```
#### 5. ODS 特性
- **输出对象生成**:将原始数据与一个或多个表定义结合,生成一个或多个输出对象,并可将这些对象发送到任何或所有 ODS 目标。通过选择 ODS 目标控制输出类型,当前可用目标可生成传统等宽输出、输出数据集、包含输出对象层次结构文件的 ODS 文档、适用于高分辨率打印机的输出、各种标记语言格式的输出以及适用于 Microsoft Word 的 RTF 输出。
- **表定义提供**:提供定义 SAS 过程和 DATA 步骤输出结构的表定义,可通过修改这些定义或创建自己的定义来定制输出。
- **输出对象选择**:可选择将单个输出对象发送到 ODS 目标。例如,PROC UNIVARIATE 生成五个输出对象,可轻松为其中任何或所有对象创建 HTML 输出、输出数据集、传统列表输出或打印机输出,还可将不同输出对象发送到不同目标。
- **结果存储**:在 SAS 窗口环境中,将每个输出对象的链接存储在结果窗口的结果文件夹中。
- **扩展性**:由于格式化集中在 ODS 中,添加新的 ODS 目标不会影响任何过程或 DATA 步骤。未来添加的目标将自动可供 DATA 步骤和所有支持 ODS 的过程使用。
- **资源节省**:可从单个源为多个目标生成输出,无需为每个目标维护单独的源,通过一次运行过程或数据查询生成多种输出,节省时间和系统资源。
#### 6. ODS 目标理解
- **ODS 目标类别概述**:ODS 可将 SAS 过程和 DATA 步骤的输出发送到多个不同目标,这些目标分为两类:
| 类别 | 目标 | 结果 |
| --- | --- | --- |
| SAS 格式化目标 | DOCUMENT | ODS 文档 |
| | LISTING | SAS 输出列表 |
| | OUTPUT | SAS 数据集 |
| 第三方格式化目标 | HTML | 用于在线查看的 HTML 文件 |
| | MARKUP | 标记语言标签集 |
| | PRINTER | 三种不同格式的可打印输出:PCL、PDF 或 PS(PostScript) |
| | RTF | 以 Rich Text 格式编写的用于 Microsoft Word 2000 的输出 |
- **与第三方格式化目标相关**:第三方格式化目标可应用样式、标记语言或使用页面描述语言打印到物理打印机,如生成 PostScript、HTML、XML 或自定义的样式或标记语言输出。
- **目标独立输入定义**:目标独立输入意味着一个目标可以支持某个功能,即使另一个目标不支持。在这种情况下,不支持该功能的目标会忽略该请求。否则,ODS 将仅支持所有目标共有的一小部分功能,这会使将报告从一种输出格式转换为另一种输出格式变得困难。ODS 提供多种输出格式化选项,应选择适合目的的目标。
#### 7. SAS 格式化目标
- **DOCUMENT 目标**:可重新组织、导航和以不同方式重播数据到不同目标,无需重新运行分析或重复数据库查询。使整个输出流以“原始”形式可用,可进行自定义。输出以数据组件加表定义的原始内部表示形式保存,处于 DOCUMENT 形式时,无需重新运行分析即可重新排列、重组和重新格式化。与其他 ODS 目标不同,有 GUI 界面,但通过 GUI 能做的一切也可使用 ODS DOCUMENT 语句和 DOCUMENT 过程通过批处理命令完成。在 SAS 9 之前,每个过程或 DATA 步骤会将输出发送到指定的每个目标,若要使用未最初指定的目标,需重新运行过程或数据查询。DOCUMENT 目标消除了重新运行过程或重复数据查询的需要。
- **LISTING 目标**:生成与传统 SAS 输出外观相同的输出,是启动 SAS 会话时默认打开的目标。因此,即使未显式调用 ODS,也始终在使用它。能生成与以前版本的 SAS 具有相同外观和呈现方式的传统 SAS 输出。由于大多数过程共享一些相同的表定义,输出更一致。不过,有四个过程(PRINT 过程、REPORT 过程、TABULATE 过程和 FREQ 过程的 n 向表)不使用默认表定义生成输出,它们使用程序代码中指定的结构来定义表。
- **OUTPUT 目标**:生成 SAS 输出数据集。由于 ODS 已知道数据的逻辑结构和原始形式,可输出与过程内部处理的结果数据集完全相同的 SAS 数据集。输出数据集可用于进一步分析,或用于复杂报告,将不同数据集中的类似统计信息合并到单个表中。可使用所有 SAS 数据集功能轻松访问和处理输出数据集,例如使用变量名访问输出数据并执行 WHERE 表达式处理。
### 输出交付系统(ODS)基础入门
#### 8. 第三方格式化目标
第三方格式化目标能够让我们将输出应用各种样式、标记语言,或者使用页面描述语言打印到物理打印机。以下是对各第三方格式化目标的详细介绍:
- **HTML 目标**:可以生成 HTML 格式的输出文件。这些文件能通过 Internet Explorer、Netscape 或其他支持 HTML 4.0 的浏览器进行浏览。若要创建 HTML 3.2 格式的输出,需要使用 ODS HTML3 语句。
- **MARKUP 目标**:使用多种标记语言格式化 SAS 输出,如 HTML、XML、LaTeX 等,我们可以通过 Web 浏览器访问这些输出。SAS 提供了众多标记语言供我们使用,我们也可以创建自己的标记语言并将其存储为用户自定义的标记语言。
- **PRINTER 目标**:生成适用于高分辨率打印机的输出文件,常见的格式有 PostScript(PS)、PDF 或 PCL 文件。这些格式的文件可以直接用于打印。
- **RTF 目标**:生成适用于 Microsoft Word 的 RTF 格式输出。我们可以将生成的 RTF 文件直接在 Microsoft Word 中打开和编辑。
#### 9. 控制第三方格式的格式化功能
虽然第三方格式化目标为我们带来了丰富的输出格式选择,但不同的第三方格式有不同的特点和要求,我们需要对其格式化功能进行控制,以达到我们期望的输出效果。以下是一些常见的控制方法:
- **标记语言选择**:根据输出的用途和受众,选择合适的标记语言。例如,如果输出需要在网页上展示,HTML 是一个不错的选择;如果需要进行数据交换或存储,XML 可能更合适。
- **样式设置**:对于支持样式设置的格式,如 HTML 和 RTF,我们可以设置字体、颜色、对齐方式等样式,使输出更加美观和易读。
- **页面布局**:在生成适用于打印的输出时,如 PDF 和 PostScript,我们需要考虑页面布局,包括页边距、页眉页脚等设置。
#### 10. ODS 目标与系统资源
不同的 ODS 目标对系统资源的需求是不同的。在选择 ODS 目标时,我们需要考虑系统资源的使用情况,以确保系统的稳定运行。以下是一些不同目标对系统资源的影响:
| 目标类型 | 系统资源需求 |
| --- | --- |
| LISTING | 相对较低,主要用于生成简单的文本输出,对内存和 CPU 的占用较少 |
| HTML | 适中,生成 HTML 文件需要一定的内存和 CPU 资源,特别是在处理大量数据和复杂样式时 |
| PDF | 较高,生成 PDF 文件需要进行复杂的排版和渲染,对内存和 CPU 的要求较高 |
| RTF | 适中,与 HTML 类似,生成 RTF 文件需要一定的系统资源 |
为了优化系统资源的使用,我们可以采取以下措施:
- **合理选择目标**:根据输出的需求和系统资源的情况,选择合适的 ODS 目标。例如,如果只是需要简单的文本输出,选择 LISTING 目标可以节省系统资源。
- **分批处理数据**:对于大量数据的处理,我们可以将数据分批处理,避免一次性占用过多的系统资源。
#### 11. 理解表定义、表元素和表属性
- **表定义**:是一组描述如何格式化数据的指令,它规定了数据的呈现方式,包括列的顺序、列标题的文本和顺序、数据格式、字体大小和字体样式等。例如,在一个销售数据的表格中,表定义可以规定销售金额列使用货币格式显示。
- **表元素**:是表中的具体组成部分,如列、行、标题等。每个表元素都有自己的属性,这些属性决定了元素的外观和行为。
- **表属性**:用于控制表元素的特征,如字体颜色、背景颜色、对齐方式等。通过设置表属性,我们可以对表的外观进行定制。
#### 12. 理解样式定义、样式元素和样式属性
- **样式定义概述**:样式定义是一组预定义的样式规则,用于控制输出的外观。它包含了多个样式元素和样式属性的设置。
- **随 SAS 软件提供的样式定义**:SAS 软件提供了多种样式定义,我们可以直接使用这些样式定义来快速设置输出的外观。例如,有一些样式定义适用于正式报告,有一些适用于演示文稿。
- **在 Base SAS 过程中使用样式定义**:我们可以在 Base SAS 过程中指定使用的样式定义,以改变输出的外观。例如,在使用 PROC PRINT 过程时,可以通过选项指定使用的样式定义。
#### 13. 更改 ODS 的 SAS 注册表设置
- **ODS 与 SAS 注册表概述**:SAS 注册表存储了 ODS 的一些默认设置和配置信息。通过更改注册表中的设置,我们可以对 ODS 的行为进行定制。
- **更改默认 HTML 版本设置**:如果需要更改默认生成的 HTML 版本,可以在注册表中修改相应的设置。具体操作步骤如下:
1. 打开 SAS 注册表编辑器。
2. 找到与 ODS HTML 相关的设置项。
3. 修改默认 HTML 版本的参数值。
- **更改 ODS 目标默认设置**:我们也可以更改 ODS 目标的默认设置,如默认的输出路径、文件格式等。操作步骤如下:
1. 打开 SAS 注册表编辑器。
2. 找到与 ODS 目标相关的设置项。
3. 修改相应的默认设置参数。
#### 14. 定制 ODS 输出
- **SAS 输出定制**:我们可以对 SAS 输出进行定制,以满足特定的需求。定制的方式包括选择和排除特定的输出对象、修改表定义和样式定义等。
- **选择和排除列表**:通过使用选择和排除列表,我们可以指定哪些输出对象需要输出,哪些需要排除。例如,在一个复杂的分析过程中,可能会生成多个输出对象,我们可以只选择我们需要的对象进行输出。
- **ODS 确定输出对象目标的方式**:ODS 根据一定的规则确定输出对象的目标。它会考虑输出对象的属性、目标的设置以及用户的选择等因素。例如,如果一个输出对象被指定为只输出到 HTML 目标,那么它就不会被发送到其他目标。
- **为输出对象定制输出**:我们可以为每个输出对象定制特定的输出格式和样式。例如,对于一个销售报表中的不同表格,可以设置不同的字体颜色和背景颜色。
- **定制标题和脚注**:标题和脚注是输出的重要组成部分,我们可以对它们进行定制。例如,设置标题的字体大小、颜色和对齐方式,以及脚注的内容和位置。
以下是一个定制标题和脚注的示例代码:
```sas
ods listing;
title "Customized Title";
footnote "Customized Footnote";
proc print data=sashelp.class;
run;
ods listing close;
```
通过以上对 ODS 的详细介绍,我们了解了 ODS 的基本概念、工作原理、各种目标以及如何进行定制。掌握这些知识,我们可以更加灵活地使用 ODS 生成满足不同需求的输出。
mermaid 流程图展示定制 ODS 输出的流程:
```mermaid
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(原始数据):::process --> B(表定义和样式定义):::process
B --> C(输出对象):::process
C --> D{选择目标}:::process
D --> E1(HTML):::process
D --> E2(PDF):::process
D --> E3(LISTING):::process
D --> E4(RTF):::process
E1 --> F1(定制 HTML 输出):::process
E2 --> F2(定制 PDF 输出):::process
E3 --> F3(定制 LISTING 输出):::process
E4 --> F4(定制 RTF 输出):::process
```
在这个流程中,我们首先有原始数据,然后结合表定义和样式定义生成输出对象。接着选择输出的目标,最后对每个目标的输出进行定制。这样我们就可以根据不同的需求生成多样化的输出。
0
0
复制全文
相关推荐









