Sas 简明教程
SAS - Overview
SAS 代表 Statistical Analysis Software 。它于 1960 年由 SAS 研究所创建。从 1960 年 1 月 1 日起,SAS 已用于数据管理、商业智能、预测分析、描述性和规范性分析等。从那时起,在软件中引入了许多新的统计过程和组件。
随着用于统计的 JMP(Jump)的引入,SAS 利用了由 Macintosh 引入的 Graphical user Interface 。Jump 主要用于六西格玛、设计、质量控制以及工程和科学分析等应用。
SAS 与平台无关,这意味着你可以在任何操作系统(例如 Linux 或 Windows)上运行 SAS。SAS 由 SAS 程序员驱动,他们对 SAS 数据集使用一系列操作,以生成适当的数据分析报告。
多年来,SAS 已向其产品组合中添加了大量解决方案。它已为数据治理、数据质量、大数据分析、文本挖掘、欺诈管理、健康科学等提供了解决方案。我们可以安全地假设 SAS 已针对各个业务领域提供了解决方案。
若要大致了解可用产品,你可以访问 SAS Components
Why we use SAS
SAS 基本上会处理大型数据集。在 SAS 软件的帮助下,你可以对数据执行各种操作,如:
-
Data Management
-
Statistical Analysis
-
报告编制以及完美的图形
-
Business Planning
-
运筹学和项目管理
-
Quality Improvement
-
Application Development
-
Data extraction
-
Data transformation
-
Data updation and modification
如果我们讨论 SAS 的组件,那么 SAS 中提供了 200 多个组件。
Sr.No. |
SAS 组件及用法 |
1 |
Base SAS 这是一个核心组件,它包含数据管理工具和数据分析的编程语言。它也是使用最广泛的组件。 |
2 |
SAS/GRAPH 创建图表和展示,以更好地理解并以适当格式展示结果。 |
3 |
SAS/STAT 使用方差分析、回归、多变量分析、生存分析、心理测量分析以及混合模型分析执行统计分析。 |
4 |
SAS/OR Operations research. |
5 |
SAS/ETS 经济计量学和时间序列分析。 |
6 |
SAS/IML CInteractive matrix language. |
7 |
SAS/AF Applications facility. |
8 |
SAS/QC Quality control. |
9 |
SAS/INSIGHT Data mining. |
10 |
SAS/PH Clinical trial analysis. |
11 |
SAS/Enterprise Miner Data mining. |
Types of SAS Software
-
Windows or PC SAS
-
SAS EG (Enterprise Guide)
-
SAS EM(即企业矿工,用于预测分析)
-
SAS Means
-
SAS Stats
我们普遍在组织和培训机构中使用 SAS 窗口。其中一些组织使用 Linux,但没有图形用户界面,所以你必须针对每个查询编写代码。但在窗口版 SAS 中,有一些可以极大帮助程序员的实用工具,而且它还可以减少代码编写时间。
SAS 窗口有 5 个部分。
Sr.No. |
SAS 窗口及用法 |
1 |
Log Window 日志窗口就像一个执行窗口,我们可以在其中检查 SAS 程序的执行情况。在此窗口中,我们还可以检查错误。在运行程序之后务必每次检查日志窗口都非常重要。这样我们就能对程序的执行情况有更恰当的了解。 |
2 |
Editor Window 编辑器窗口就是我们编写所有代码的 SAS 部分。它就像一个便笺本。 |
3 |
Output Window 输出窗口是我们查看程序输出结果的一个结果窗口。 |
4 |
Result Window 它就像所有输出的一个索引。我们在一个 SAS 会话中运行的所有程序都列于其中,你可以通过点击输出结果来打开该输出。但是,这些仅在一个 SAS 会话中被提及。如果我们关闭软件然后再次打开它,那么结果窗口将为空。 |
5 |
Explore Window 在此列出了所有库。你还可以在此浏览你计算机上受 SAS 支持的文件。 |
Libraries in SAS
库就像 SAS 中的存储空间。你可以创建一个库,并将所有类似的程序保存在该库中。SAS 为你提供了创建多个库的功能。SAS 库只有 8 个字符长。
SAS 中有两种类型的库 −
Sr.No. |
SAS 窗口及用法 |
1 |
Temporary or Work Library 这是 SAS 的默认库。如果我们没有向任意其他库分配程序,那么我们创建的所有程序将存储在此工作库中。你可以在资源管理器窗口中查看此工作库。如果你创建了一个 SAS 程序,且没有向其分配任何永久库,那么,如果你在会话结束之后再次启动该软件,那么此程序将不再存在于此工作库中。因为它仅在会话持续期间存储在工作库中。 |
2 |
Permanent Library 这些是 SAS 的永久库。我们可以使用 SAS 实用程序或在编辑器窗口中写入代码来创建新的 SAS 库。这些库被命名为永久库,因为如果我们在 SAS 中创建了一个程序并将它保存在这些永久库中,那么只要我们想要它们,它们将始终可用。 |
SAS - Environment
SAS Institute Inc. 已经发布了免费的 SAS University Edition ,它完全能满足学习 SAS 编程的需求。它提供了学习 BASE SAS 编程所需的所有功能,进而让你能够学习任何其他 SAS 组件。
下载和安装 SAS University Edition 的过程非常简单。它作为虚拟机提供,需要在虚拟环境中运行。在你运行 SAS 软件之前,你的 PC 中需要已经安装了虚拟化软件。在本教程中,我们将使用 VMware 。以下是下载、设置 SAS 环境和验证安装所涉及的步骤的详细信息。
Download SAS University Edition
SAS University Edition 可在此 URL 下载: SAS University Edition 。请向下滚动,在开始下载之前阅读系统要求。访问此 URL 会出现以下屏幕。
Setup virtualization software
向下滚动到同一页面上以找到安装步骤 1。此步骤提供了获取适合你的虚拟化软件的链接。如果你已经在你的计算机中安装了其中任何一款软件,你可以跳过此步骤。
Download the Zip file
在步骤 3 中,你可以选择与你所具有的虚拟化环境兼容的 SAS University Edition 的相应版本。它会下载为一个 zip 文件,文件名类似于 unvbasicvapp_9411005_vmx_en_sp0__1.zip
Loading the virtual machine
启动 VMware 播放器(或工作站)并打开以扩展名 .vmx 结尾的文件。会出现以下屏幕。请注意分配给 vm 的基础设置,比如内存和硬盘空间。
SAS - User Interface
SAS - Program Structure
SAS 编程涉及首先将数据集创建/读取到内存中,然后对该数据执行分析。我们需要了解按哪种流程编写程序才能实现这一点。
SAS Program Structure
下图显示了按给定顺序编写 SAS 程序所要执行的步骤。
每个 SAS 程序都必须包含所有这些步骤才能完成读取输入数据、分析数据和给出分析输出。还需要在每一步的末尾添加 RUN 语句来完成该步骤的执行。
DATA Step
此步骤涉及将所需数据集加载到 SAS 内存并确定数据集的变量(也称为列)。它还捕获记录(也称为观察值或受试者)。DATA 语句的语法如下。
Syntax
DATA data_set_name; #Name the data set.
INPUT var1,var2,var3; #Define the variables in this data set.
NEW_VAR; #Create new variables.
LABEL; #Assign labels to variables.
DATALINES; #Enter the data.
RUN;
Example
以下示例显示了对数据集命名、定义变量、创建新变量和输入数据的简单情况。此处,字符串变量的末尾都有一个 $,而数字值则没有。
DATA TEMP;
INPUT ID $ NAME $ SALARY DEPARTMENT $;
comm = SALARY*0.25;
LABEL ID = 'Employee ID' comm = 'COMMISION';
DATALINES;
1 Rick 623.3 IT
2 Dan 515.2 Operations
3 Michelle 611 IT
4 Ryan 729 HR
5 Gary 843.25 Finance
6 Nina 578 IT
7 Simon 632.8 Operations
8 Guru 722.5 Finance
;
RUN;
SAS - Basic Syntax
与任何其他编程语言一样,SAS 语言也有自己的语法规则来编写 SAS 程序。
任何 SAS 程序的三个部分——语句、变量和数据集遵循以下语法规则。
SAS Statements
-
语句可以在任意位置开始和结束。最后一行末尾的分号标记语句的结束。
-
多个 SAS 语句可以位于同一行上,每个语句都以分号结尾。
-
空格可用于分隔 SAS 程序语句中的各个部分。
-
SAS 关键字不区分大小写。
-
每个 SAS 程序都必须以 RUN 语句结束。
SAS Variable Names
SAS 中的变量表示 SAS 数据集中的列。变量名称遵循以下规则。
-
它最多可以包含 32 个字符。
-
不可包含空格。
-
它必须以字母 A 到 Z(不区分大小写)或下划线 (_) 开头。
-
可以包含数字,但不能作为第一个字符。
-
变量名称不区分大小写。
SAS Data Set
DATA 语句标记为一个新 SAS 数据集的创建。数据集创建的规则如下。
-
DATA 语句后跟的单词表示临时数据集名称。这意味着该数据集会在会话结束时被删除。
-
数据集名称可以以库名称作为前缀,从而使其成为永久数据集。这意味着该数据集会在会话结束后继续存在。
-
如果省略 SAS 数据集名称,SAS 则会创建一个临时数据集,且该数据集名称由 SAS 生成,如 DATA1、DATA2 等。
SAS File Extensions
SAS 程序、数据文件和程序的结果保存在 Windows 中的各种扩展程序中。
-
*.sas - 它代表 SAS 代码文件,可以使用 SAS 编辑器或任何文本编辑器对其进行编辑。
-
*.log - 它代表 SAS 日志文件,其中包含有关已提交 SAS 程序的错误、警告和数据集详细信息等信息。
-
*.mht / *.html - 它代表 SAS 结果文件。
-
*.sas7bdat - 它代表 SAS 数据文件,其中包含 SAS 数据集,包括变量名称、标签和计算结果。
SAS - Data Sets
可供 SAS 程序进行分析的数据称为 SAS 数据集。它使用 DATA 步骤创建。SAS 可以读取各种文件作为其数据源,如 CSV, Excel, Access, SPSS and also raw data 。它还有许多可供使用的内置数据源。
-
如果 SAS 程序使用数据集然后在会话运行后将其丢弃,则这些数据集称为 temporary Data Set 。
-
但是如果将其永久存储以供将来使用,则称为 permanent Data set 。所有永久数据集都存储在一个特定的库中。
SAS 数据集以行和列的形式存储,也称为 SAS 数据表。以下我们看到永久数据集的示例,它们是内置的,也可以从外部源读取。
SAS Built-In Data Sets
这些数据集已经内置在已安装的 SAS 软件中。在制定数据分析的示例表达式时,可以探索和使用它们。要探索这些数据集,请转到 Libraries → My Libraries → SASHELP 。展开它后,我们会看到所有可用的内置数据集的名称列表。
让我们向下滚动找到一个名为 CARS 的数据集。双击此数据集会在右侧窗口格中将其打开,在那里我们可以进一步探索它。我们还可以使用右侧窗口格下的最大化视图按钮来最小化左侧窗口格。
我们可以使用底部的滚动条向右滚动以浏览表格中的所有列及其值。
Importing External Data Sets
我们可以通过使用 SAS Studio 中提供的导入功能将我们自己的文件导出为数据集。但这些文件必须放在 SAS 服务器文件夹中。因此,我们必须使用 Server Files and Folders 下的上传选项将源数据文件上传到 SAS 文件夹。
接下来,我们通过导入来在 SAS 程序中使用上述文件。为此,我们使用 任务 → 工具 → 导入数据 选项,如下所示。双击导入数据按钮,将在右侧打开一个窗口,用于选择该数据集的文件。
接下来,单击右侧导入数据程序下的 Select Files 按钮。以下是可以导入的文件类型列表。
我们选择存储在本地系统中的 "employee.txt" 文件,并将其导入,如下所示。
SAS - Variables
通常,SAS 中的变量表示其正在分析的数据表的列名。但它也可以用于其他目的,如在编程循环中将它用作计数器。在当前章节中,我们将看到 SAS 变量用作 SAS 数据集的列名的用法。
SAS Variable Types
SAS 具有以下三种类型的变量:
Syntax
INPUT VAR1 $ VAR2 $ VAR3 $; #Define character variables in the data set.
在以上语法中,INPUT 语句显示了字符变量的声明。
Use of Variables in SAS Program
如以下示例中所示,上述变量用于 SAS 程序中。
Example
以下代码显示了如何声明并在 SAS 程序中使用这三种类型的变量
DATA TEMP;
INPUT ID NAME $ SALARY DEPT $ DOJ DATE9. ;
FORMAT DOJ DATE9. ;
DATALINES;
1 Rick 623.3 IT 02APR2001
2 Dan 515.2 OPS 11JUL2012
3 Michelle 611 IT 21OCT2000
4 Ryan 729 HR 30JUL2012
5 Gary 843.25 FIN 06AUG2000
6 Tusar 578 IT 01MAR2009
7 Pranab 632.8 OPS 16AUG1998
8 Rasmi 722.5 FIN 13SEP2014
;
PROC PRINT DATA = TEMP;
RUN;
在以上示例中,所有字符变量在后面声明并加有 $ 符号,所有日期变量在后面声明并加有日期格式。以上程序的输出如下。
Using the Variables
变量在分析数据中非常有用。它们用于对统计分析应用的表达式中。我们来看一个示例,分析名为 CARS 的内置数据集,该数据集存在于 Libraries → My Libraries → SASHELP 下。双击它以浏览变量及其数据类型。
接下来,我们可以使用 SAS studio 中的任务选项来生成其中一些变量的汇总统计信息。转到 Tasks → Statistics → Summary Statistics 并双击它以打开窗口,如下所示。选择数据集 SASHELP.CARS 并选择分析变量下的三个变量 - MPG_CITY、MPG_Highway 和 Weight。在单击选择变量时按住 Ctrl 键。单击运行。
在执行以上步骤后单击结果选项卡。它显示了所选三个变量的统计汇总。最后一列表明用于分析的观测值(记录)数量。
SAS - Strings
在 SAS 中,字符串是包含在一对单引号中的值。还需要在变量声明的末尾添加一个空格和 $ 符号,才能声明字符串变量。SAS 具有很多可以分析和操作字符串的强大函数。
Declaring String Variables
我们可以声明字符串变量及其值,如下所示。在下面的代码中,我们声明了两个长度分别为 6 和 5 的字符变量。LENGTH 关键字用于声明变量而不创建多个观测值。
data string_examples;
LENGTH string1 $ 6 String2 $ 5;
/*String variables of length 6 and 5 */
String1 = 'Hello';
String2 = 'World';
Joined_strings = String1 ||String2 ;
run;
proc print data = string_examples noobs;
run;
在运行上述代码后,我们得到了一个输出,其中显示了变量名及其值。
SUBSTRN
此函数使用起始和结束位置提取子字符串。如果未提及结束位置,它将一直提取到字符串的末尾。
SAS - Arrays
SAS 中的数组用于使用索引值存储和检索一系列值。索引表示保留内存区域中的位置。
Syntax
在 SAS 中,使用以下语法声明数组 −
ARRAY ARRAY-NAME(SUBSCRIPT) ($) VARIABLE-LIST ARRAY-VALUES
在以上语法中 −
-
ARRAY 是用于声明数组的 SAS 关键字。
-
ARRAY-NAME 是数组的名称,它遵循与变量名称相同的规则。
-
SUBSCRIPT 是数组将存储的值的数量。
-
($) 是仅在数组将存储字符值时使用的可选参数。
-
VARIABLE-LIST 是作为数组值占位符的可变变量的可选列表。
-
ARRAY-VALUES 是存储在数组中的实际值。它们可以在这里声明,也可以从文件或文件行中读取。
Examples of Array Declaration
可以使用以上语法以多种方式声明数组。以下为示例。
# Declare an array of length 5 named AGE with values.
ARRAY AGE[5] (12 18 5 62 44);
# Declare an array of length 5 named COUNTRIES with values starting at index 0.
ARRAY COUNTRIES(0:8) A B C D E F G H I;
# Declare an array of length 5 named QUESTS which contain character values.
ARRAY QUESTS(1:5) $ Q1-Q5;
# Declare an array of required length as per the number of values supplied.
ARRAY ANSWER(*) A1-A100;
Accessing Array Values
可以通过使用 print 过程来访问存储在数组中的值,如下所示。在一个数组值是用上述其中一种方法声明之后,使用 DATALINES 语句提供数据。
DATA array_example;
INPUT a1 $ a2 $ a3 $ a4 $ a5 $;
ARRAY colours(5) $ a1-a5;
mix = a1||'+'||a2;
DATALINES;
yello pink orange green blue
;
RUN;
PROC PRINT DATA = array_example;
RUN;
当我们执行以上代码时,会产生以下结果 -
Using the OF operator
当分析来自数组的数据以对数组的整行执行计算时,OF 运算符将用于。在下面的示例中,我们对每一行的值应用总和和平均值。
DATA array_example_OF;
INPUT A1 A2 A3 A4;
ARRAY A(4) A1-A4;
A_SUM = SUM(OF A(*));
A_MEAN = MEAN(OF A(*));
A_MIN = MIN(OF A(*));
DATALINES;
21 4 52 11
96 25 42 6
;
RUN;
PROC PRINT DATA = array_example_OF;
RUN;
当我们执行以上代码时,会产生以下结果 -
Using the IN operator
还可以使用 IN 运算符访问数组中的值,该运算符检查数组行中是否存在某个值。在下面的示例中,我们检查数据中是否有颜色 “Yellow” 。此值为区分大小写。
DATA array_in_example;
INPUT A1 $ A2 $ A3 $ A4 $;
ARRAY COLOURS(4) A1-A4;
IF 'yellow' IN COLOURS THEN available = 'Yes';ELSE available = 'No';
DATALINES;
Orange pink violet yellow
;
RUN;
PROC PRINT DATA = array_in_example;
RUN;
当我们执行以上代码时,会产生以下结果 -
SAS - Numeric Formats
SAS 可以处理多种数值数据格式。它在变量名称的末尾使用这些格式,将特定的数值格式应用到数据。SAS 使用两种数值格式。一种用于读取称为 informat 的数值数据的特定格式,另一种用于以称为 output format 的特定格式显示数值数据。
Syntax
数值信息格式的语法为 −
Varname Formatnamew.d
以下是所用参数的描述 -
-
Varname 是变量的名称。
-
Formatname 是应用到变量的数值格式的名称。
-
w 是允许为该变量存储的最大数据列数(包括小数点后的位数和小数点本身)。
-
d 是小数点右边的位数。
Examples
以下示例说明了上述情况。
DATA MYDATA1;
input x 6.; /*maxiiuum width of the data*/
format x 6.3;
datalines;
8722
93.2
.1122
15.116
PROC PRINT DATA = MYDATA1;
RUN;
DATA MYDATA2;
input x 6.; /*maximum width of the data*/
format x 5.2;
datalines;
8722
93.2
.1122
15.116
PROC PRINT DATA = MYDATA2;
RUN;
DATA MYDATA3;
input x 6.; /*maximum width of the data*/
format x DOLLAR10.2;
datalines;
8722
93.2
.1122
15.116
PROC PRINT DATA = MYDATA3;
RUN;
当我们执行以上代码时,会产生以下结果 -
# MYDATA1.
Obs x
1 8722.0 # Display 6 columns with zero appended after decimal.
2 93.200 # Display 6 columns with zero appended after decimal.
3 0.112 # No integers before decimal, so display 3 available digits after decimal.
4 15.116 # Display 6 columns with 3 available digits after decimal.
# MYDATA2
Obs x
1 8722 # Display 5 columns. Only 4 are available.
2 93.20 # Display 5 columns with zero appended after decimal.
3 0.11 # Display 5 columns with 2 places after decimal.
4 15.12 # Display 5 columns with 2 places after decimal.
# MYDATA3
Obs x
1 $8,722.00 # Display 10 columns with leading $ sign, comma at thousandth place and zeros appended after decimal.
2 $93.20 # Only 2 integers available before decimal and one available after the decimal.
3 $0.11 # No integers available before decimal and two available after the decimal.
4 $15.12 # Only 2 integers available before decimal and two available after the decimal.
SAS - Operators
SAS 中的运算符是一种符号,用于数学、逻辑或比较表达式中。这些符号内置于 SAS 语言中,许多运算符可以组合到单个表达式中以提供最终输出。
下面是 SAS 运算符类别的列表。
-
Arithmetic Operators
-
Logical Operators
-
Comparison Operators
-
Minimum/Maximum Operators
-
Concatenation Operator
我们将逐个查看每个运算符。运算符始终与作为 SAS 程序正在分析的数据一部分的变量一起使用。
Arithmetic Operators
下表描述了算术运算符的详细信息。我们假设两个数据变量 V1 和 V2*with values *8 和 4 。
Operator |
Description |
Example |
+ |
Addition |
V1+V2=12 |
- |
Subtraction |
V1-V2=4 |
* |
Multiplication |
V1*V2=32 |
/ |
Division |
V1/V2=2 |
** |
Exponentiation |
V1**V2=4096 |
Logical Operators
下表描述了逻辑运算符的详细信息。这些运算符计算表达式的真值。因此,逻辑运算符的结果始终是 1 或 0。我们假设两个数据变量 V1 和 V2*with values *8 和 4 。
Operator |
Description |
Example |
& |
AND 运算符。如果两个数据值都计算为真,则结果为 1,否则为 0。 |
(V1>2 & V2 > 3) 得 0。 |
OR 运算符。如果任何一个数据值求值为真,则结果为 1,否则为 0。 |
||
(V1>9 & V2 > 3) 为 1。 |
~ |
NOT 运算符。NOT 运算符的结果为虚假或缺失值的表达式的形式为 1,否则为 0。 |
Comparison Operators
下表对比较运算符的详细信息进行了描述。这些运算符将变量的值进行比较,结果为真值,真为 1,假为 0。让我们假设两个数据变量分别为 V1 、 V2*with values *8 和 4 。
Operator |
Description |
Example |
= |
EQUAL 运算符。如果两个数据值相等,则结果为 1,否则为 0。 |
(V1 = 8) 给出 1。 |
^= |
NOT EQUAL 运算符。如果两个数据值不相等,则结果为 1,否则为 0。 |
(V1 ^= V2) 给出 1。 |
< |
The LESS THAN Operator. |
(V2 < V2) 给出 1。 |
⇐ |
小于或等于运算符。 |
(V2 ⇐ 4) 给出 1。 |
> |
The GREATER THAN Operator. |
(V2 > V1) 给出 1。 |
>= |
大于或等于运算符。 |
(V2 >= V1) 给出 0。 |
IN |
IN 运算符。如果变量的值等于给定值列表中的任何一个值,它返回 1,否则返回 0。 |
V1 in (5,7,9,8) 给出 1。 |
Minimum/Maximum Operators
下表对最小/最大运算符的详细信息进行了描述。这些运算符将变量的值在行中进行比较,并且从行中值的列表中返回最小值或最大值。
Operator |
Description |
Example |
MIN |
MIN 运算符。它返回行中值的列表中的最小值。 |
MIN(45.2,11.6,15.41) gives 11.6 |
MAX |
MAX 运算符。它返回行中值的列表中的最大值。 |
MAX(45.2,11.6,15.41) gives 45.2 |
SAS - Loops
在某些情况下,需要执行一个代码块多次。通常,语句顺序执行——函数中的第一个语句首先执行,接着执行第二个语句,依此类推。但是,当您希望同组语句重复执行时,我们需要循环的帮助。
在 SAS 中,使用 DO 语句进行循环。它也被称为 DO Loop 。下面给出了 SAS 中 DO 循环语句的常用形式。
SAS - Decision Making
决策结构要求程序员指定程序要评估或测试的一个或多个条件,以及在确定条件为 true 时要执行的语句或语句,而且在条件确定为 false 时可能还要执行其他一些语句。
以下是大多数编程语言中常见的典型决策结构的一般形式 −
SAS 提供以下类型的决策语句。单击以下链接查看其详细信息。
Sr.No. |
Statement Type & Description |
1 |
IF Statement. if statement 包含一个条件。如果条件为真,则获取特定数据。 |
2 |
IF-THEN-ELSE Statement. if statement 后面跟 else 语句,该语句在布尔条件为假时执行。 |
3 |
IF-THEN-ELSE-IF Statement. if statement 后面跟 else 语句,而该语句后面又跟另一对 IF-THEN 语句。 |
4 |
IF-THEN-DELETE Statement. if statement 包含一个条件,当该条件为真时,从观察数据中删除特定数据。 |
SAS - Functions
SAS 拥有各种内置函数,有助于分析和处理数据。这些函数用作 DATA 语句的一部分。它们以数据变量作为参数,并返回存储到另一个变量中的结果。根据函数的类型,它所采用的参数数量可能会发生变化。某些函数接受零个参数,而其他一些函数则接受固定数量的变量。以下是 SAS 提供的函数类型列表。
Syntax
在 SAS 中使用函数的常规语法如下所示。
FUNCTIONNAME(argument1, argument2...argumentn)
这里的参数可以是常量、变量、表达式或另一个函数。
Function Categories
根据其用途,SAS 中的函数被归类如下。
-
Mathematical
-
Date and Time
-
Character
-
Truncation
-
Miscellaneous
Mathematical Functions
这些函数用来对变量值施加一些数学运算。
Examples
下面的 SAS 程序演示了几个重要的数学函数的使用。
data Math_functions;
v1=21; v2=42; v3=13; v4=10; v5=29;
/* Get Maximum value */
max_val = MAX(v1,v2,v3,v4,v5);
/* Get Minimum value */
min_val = MIN (v1,v2,v3,v4,v5);
/* Get Median value */
med_val = MEDIAN (v1,v2,v3,v4,v5);
/* Get a random number */
rand_val = RANUNI(0);
/* Get Square root of sum of the values */
SR_val= SQRT(sum(v1,v2,v3,v4,v5));
proc print data = Math_functions noobs;
run;
当运行上述代码时,我们会得到以下输出:
Date and Time Functions
这些函数用来处理日期和时间值。
Examples
下面的 SAS 程序演示了日期和时间函数的使用。
data date_functions;
INPUT @1 date1 date9. @11 date2 date9.;
format date1 date9. date2 date9.;
/* Get the interval between the dates in years*/
Years_ = INTCK('YEAR',date1,date2);
/* Get the interval between the dates in months*/
months_ = INTCK('MONTH',date1,date2);
/* Get the week day from the date*/
weekday_ = WEEKDAY(date1);
/* Get Today's date in SAS date format */
today_ = TODAY();
/* Get current time in SAS time format */
time_ = time();
DATALINES;
21OCT2000 16AUG1998
01MAR2009 11JUL2012
;
proc print data = date_functions noobs;
run;
当运行上述代码时,我们会得到以下输出:
Character Functions
这些函数用来处理字符或文本值。
Examples
下面的 SAS 程序演示了字符函数的使用。
data character_functions;
/* Convert the string into lower case */
lowcse_ = LOWCASE('HELLO');
/* Convert the string into upper case */
upcase_ = UPCASE('hello');
/* Reverse the string */
reverse_ = REVERSE('Hello');
/* Return the nth word */
nth_letter_ = SCAN('Learn SAS Now',2);
run;
proc print data = character_functions noobs;
run;
当运行上述代码时,我们会得到以下输出:
Truncation Functions
这些函数用来截断数值。
Examples
下面的 SAS 程序演示了截断函数的使用。
data trunc_functions;
/* Nearest greatest integer */
ceil_ = CEIL(11.85);
/* Nearest greatest integer */
floor_ = FLOOR(11.85);
/* Integer portion of a number */
int_ = INT(32.41);
/* Round off to nearest value */
round_ = ROUND(5621.78);
run;
proc print data = trunc_functions noobs;
run;
当运行上述代码时,我们会得到以下输出:
SAS - Input Methods
输入方法用来读取原始数据。原始数据可能是来自外部源或来自流式数据线。输入语句用您分配给每个字段的名称创建一个变量。所以您必须在输入语句中创建一个变量。同一个变量将显示在 SAS 数据集的输出中。下面是 SAS 中提供给不同输入方法。
-
List Input Method
-
Named Input Method
-
Column Input Method
-
Formatted Input Method
下面介绍了每种输入方法的详细信息。
List Input Method
在这种方法中,变量被列出数据类型。原始数据被仔细分析,以便匹配声明变量的顺序和数据。分隔符(通常为空格)在任何相邻列的之间应该统一。任何缺失数据都会导致输出结果错误,从而产生问题。
Named Input Method
在这种方法中,变量被列出数据类型。原始数据被修改,以便匹配数据之前声明的变量名。分隔符(通常为空格)在任何相邻列的之间应该统一。
Example
以下代码和输出演示了命名输入方法的使用。
DATA TEMP;
INPUT
EMPID= ENAME= $ DEPT= $ ;
DATALINES;
EMPID = 1 ENAME = Rick DEPT = IT
EMPID = 2 ENAME = Dan DEPT = OPS
EMPID = 3 ENAME = Tusar DEPT = IT
EMPID = 4 ENAME = Pranab DEPT = OPS
EMPID = 5 ENAME = Rasmi DEPT = FIN
;
PROC PRINT DATA = TEMP;
RUN;
运行上述代码时,我们会得到以下输出。
Column Input Method
此方法中,将变量与数据类型和列的宽度放在一起,其中宽度指定数据单列的值。例如,如果员工姓名最多包含 9 个字符,并且每个员工姓名都从第 10 列开始,则员工姓名变量的列宽为 10-19。
SAS - Macros
SAS 有一个名为 Macros 的强大编程功能,该功能允许我们避免使用代码的重复部分,并在需要时多次使用它们。它还有助于在代码中创建动态变量,这些变量可以在同一代码的不同运行实例中采用不同的值。对于将多次以类似宏变量的方式重新使用的代码块,还可以声明宏。我们在下面的示例中将看到这两个。
Macro variables
这些变量包含将被 SAS 程序反复使用的值。它们在 SAS 程序的开头进行声明,并在程序主体中进行后期调用。它们在作用域中可以是全局的或局部的。
Global Macro variable
它们被称为全局宏变量,因为任何在 SAS 环境中可用的 SAS 程序都可以访问它们。一般而言,它们是由系统分配的变量,多个程序访问这些变量。系统日期就是一个通用的示例。
Example
下面是名为 SYSDATE 的 SAS 变量的一个示例,它表示系统日期。考虑这样一个情景,在每天生成的报表标题中打印系统日期。标题将显示当前日期和星期,而我们并不会为此对它们进行任何值编码。我们使用 SASHELP 库中可用的称为 CARS 的内置 SAS 数据集。
proc print data = sashelp.cars;
where make = 'Audi' and type = 'Sports' ;
TITLE "Sales as of &SYSDAY &SYSDATE";
run;
运行上述代码后,我们得到以下输出。
Syntax
使用以下语法声明局部变量。
% LET (Macro Variable Name) = Value;
此处,根据程序要求,值字段可以采用任何数字、文本或日期值。宏变量名称是任何有效的 SAS 变量。
Example
变量由 SAS 语句使用 & * character appended at the beginning of the variable name. Below program gets us all the observation of the make 'Audi' and type 'Sports'. In case we want the result of *different make 使用,我们需要更改 make_name 的值,而不更改程序的任何其他部分。在制定程序的情况下,可以在任何 SAS 语句中反复引用此变量。
%LET make_name = 'Audi';
%LET type_name = 'Sports';
proc print data = sashelp.cars;
where make = &make_name and type = &type_name ;
TITLE "Sales as of &SYSDAY &SYSDATE";
run;
运行上述代码后,我们得到的输出与前一个程序相同。但是,让我们将 type name 更改为 'Wagon' 并运行同一程序。我们将得到以下结果。
Macro Programs
宏是一组 SAS 语句,用名称引用它们,并在程序的任何位置使用该名称。它们以 %MACRO 语句开头,以 %MEND 语句结尾。
Commonly Used Macros
SAS 编程语言中有许多内置的 SAS MACRO 语句。其他 SAS 程序可以使用它们,而不必显式声明它们。常见示例有 - 当满足某些条件时终止程序或者在程序日志中捕获变量的运行时值。以下是一些示例。
Macro %PUT
此宏语句将文本或宏变量信息写入 SAS 日志。在以下示例中,将变量“today”的值写入程序日志。
data _null_;
CALL SYMPUT ('today',
TRIM(PUT("&sysdate"d,worddate22.)));
run;
%put &today;
运行上述代码后,我们得到以下输出。
SAS - Date & Times
在 SAS 中,日期是数值的一个特例。从 1960 年 1 月 1 日开始,每一天都会指定一个特定的数值。这一天的日期值被指定为 0,下一天的日期值被指定为 1,以此类推。此日期之前的日期用 -1、-2 等表示。通过此方法,SAS 可以表示未来的任何日期和过去的任何日期。
当 SAS 从源中读取数据时,它会将读取的数据转换为由日期格式指定特定的日期格式。用于存储日期值的变量使用所需的适当的信息声明。使用输出数据格式显示输出日期。
SAS Date Informat
可以使用特定的日期信息(如下所示)正确读取源数据。信息结尾的数字表示使用该信息完全读取日期字符串所需的最小宽度。宽度较小会产生错误的结果。在 SAS V9 中,有一个通用日期格式 anydtdte15. ,它可以处理任何日期输入。
Input Date |
Date width |
Informat |
03/11/2014 |
10 |
mmddyy10. |
03/11/14 |
8 |
mmddyy8. |
December 11, 2012 |
20 |
worddate20. |
14mar2011 |
9 |
date9. |
14-mar-2011 |
11 |
date11. |
14-mar-2011 |
15 |
anydtdte15. |
SAS - Read Raw Data
SAS 可以从各种来源读取数据,其中包括许多文件格式。下面讨论在 SAS 环境中使用的文件格式。
-
ASCII(Text) Data Set
-
Delimited Data
-
Excel Data
-
Hierarchical Data
Reading ASCII(Text) Data Set
这些文件包含文本格式的数据。数据通常由空格分隔,但 SAS 还可以处理不同类型的分隔符。让我们考虑一个包含员工数据的 ASCII 文件。我们使用 SAS 中 Infile 语句读取这个文件。
Reading Excel Data
SAS 可以使用导入工具直接读取 Excel 文件。如在 SAS 数据集章节中看到的那样,它可以处理各种文件类型,包括 MS Excel。假设文件 emp.xls 在 SAS 环境中的本地可用。
Reading Hierarchical Files
在这些文件中,数据以层次格式呈现。对于给定的观测值,有一个标题记录,在它下面提到了许多详细记录。详细记录的数量可以从一个观测值到另一个观测值而有所不同。下面是层次文件的说明。
在下面的文件中,列出了每个部门下每个员工的详细信息。第一条记录是标题记录,提到了部门,下一条记录以 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
Example
为了读取层次文件,我们在下面的代码中使用了 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;
当以上代码执行时,我们会得到以下输出:
SAS - Write Data Sets
与读取数据集类似,SAS 可以写入不同格式的数据集。它可以将来自 SAS 文件的数据写入普通文本文件。其他软件程序可以读取这些文件。SAS 使用 PROC EXPORT 来写入数据集。
PROC EXPORT
这是一个内置的 SAS 过程,用于导出 SAS 数据集,以便将数据写入不同格式的文件中。
Syntax
在 SAS 中编写过程的基本语法是 −
PROC EXPORT
DATA = libref.SAS data-set (SAS data-set-options)
OUTFILE = "filename"
DBMS = identifier LABEL(REPLACE);
以下是所用参数的描述 -
-
SAS data-set 是要导出的数据集名称。SAS 可以通过创建不同操作系统可以读取的文件,从其环境与其他应用程序共享数据集。它使用内置导出函数将数据集文件输出为各种格式。在本章中,我们将看到如何使用 proc export 及其选项 dlm *and *dbms 编写 SAS 数据集。
-
SAS data-set-options 用于指定要导出的列子集。
-
filename 是将数据写入其中的文件的名称。
-
identifier 用于指明要写入文件的分隔符。
-
LABEL 选项用于指明写入文件中的变量名称。
SAS - Concatenate Data Sets
多个 SAS 数据集可以使用 SET 语句连接,以提供单个数据集。连接的数据集中的观测总数是原始数据集中观测总数之和。观测顺序是顺序的。第一个数据集中的所有观测都紧跟第二个数据集中的所有观测,依此类推。
理想情况下,所有合并的数据集都具有相同的变量,但如果变量数量不同,则结果中将显示所有变量,较小的数据集将出现缺失值。
Syntax
SAS 中 SET 语句的基本语法是 −
SET data-set 1 data-set 2 data-set 3.....;
以下是所用参数的描述 -
-
data-set1,data-set2 是依次编写的DataSet名称。
Example
考虑一个组织的员工数据,该数据可在两个不同的数据集中获得,一个用于 IT 部门,另一个用于非 IT 部门。为了获得所有员工的完整详细信息,我们使用如下所示的 SET 语句连接两个数据集。
DATA ITDEPT;
INPUT empid name $ salary ;
DATALINES;
1 Rick 623.3
3 Mike 611.5
6 Tusar 578.6
;
RUN;
DATA NON_ITDEPT;
INPUT empid name $ salary ;
DATALINES;
2 Dan 515.2
4 Ryan 729.1
5 Gary 843.25
7 Pranab 632.8
8 Rasmi 722.5
RUN;
DATA All_Dept;
SET ITDEPT NON_ITDEPT;
RUN;
PROC PRINT DATA = All_Dept;
RUN;
当以上代码执行时,我们会得到以下输出:
Different number of variables
如果原始数据集之一具有比另一数据集更多的变量,则数据集仍然会被组合,但在较小的数据集中,这些变量显示为缺失。
Example
在以下示例中,第一个数据集有一个名为 DOJ 的额外变量。在结果中,第二个数据集的 DOJ 值显示为缺失。
DATA ITDEPT;
INPUT empid name $ salary DOJ date9. ;
DATALINES;
1 Rick 623.3 02APR2001
3 Mike 611.5 21OCT2000
6 Tusar 578.6 01MAR2009
;
RUN;
DATA NON_ITDEPT;
INPUT empid name $ salary ;
DATALINES;
2 Dan 515.2
4 Ryan 729.1
5 Gary 843.25
7 Pranab 632.8
8 Rasmi 722.5
RUN;
DATA All_Dept;
SET ITDEPT NON_ITDEPT;
RUN;
PROC PRINT DATA = All_Dept;
RUN;
当以上代码执行时,我们会得到以下输出:
Different variable name
在此场景中,数据集具有相同数量的变量,但变量名在其之间不同。在这种情况下,常规连接将在结果集中生成所有变量,并对不同的两个变量给出缺失结果。虽然我们可能不会更改原始数据集中变量的名称,但我们可以在创建的连接数据集中应用 RENAME 函数。这会产生与常规连接相同的结果,当然,在一个新变量名称取代原始数据集中存在的两个不同变量名称。
Example
在以下示例中,数据集 ITDEPT 的变量名称为 ename ,而数据集 NON_ITDEPT *has the variable name *empname. 但这两个变量都表示相同的类型(字符)。我们在 SET 语句中应用 RENAME 函数,如下所示。
DATA ITDEPT;
INPUT empid ename $ salary ;
DATALINES;
1 Rick 623.3
3 Mike 611.5
6 Tusar 578.6
;
RUN;
DATA NON_ITDEPT;
INPUT empid empname $ salary ;
DATALINES;
2 Dan 515.2
4 Ryan 729.1
5 Gary 843.25
7 Pranab 632.8
8 Rasmi 722.5
RUN;
DATA All_Dept;
SET ITDEPT(RENAME =(ename = Employee) ) NON_ITDEPT(RENAME =(empname = Employee) );
RUN;
PROC PRINT DATA = All_Dept;
RUN;
当以上代码执行时,我们会得到以下输出:
Different variable lengths
如果两个数据集中变量的长度不同,则连接的数据集中将包含一些数据被截断具有较小长度的变量。如果第一个数据集的长度较小,则会发生这种情况。为了解决此问题,我们对两个数据集都应用了更高的长度,如下所示。
Example
在以下示例中,变量 ename 在第一个数据集中长度为 5,在第二个数据集中长度为 7。在连接时,我们在连接的数据集中应用 LENGTH 语句,将 ename 长度设置为 7。
DATA ITDEPT;
INPUT empid 1-2 ename $ 3-7 salary 8-14 ;
DATALINES;
1 Rick 623.3
3 Mike 611.5
6 Tusar 578.6
;
RUN;
DATA NON_ITDEPT;
INPUT empid 1-2 ename $ 3-9 salary 10-16 ;
DATALINES;
2 Dan 515.2
4 Ryan 729.1
5 Gary 843.25
7 Pranab 632.8
8 Rasmi 722.5
RUN;
DATA All_Dept;
LENGTH ename $ 7 ;
SET ITDEPT NON_ITDEPT ;
RUN;
PROC PRINT DATA = All_Dept;
RUN;
当以上代码执行时,我们会得到以下输出:
SAS - Merge Data Sets
多个 SAS 数据集可以基于一个特定的公共变量进行合并,以提供单个数据集。这是使用 MERGE 语句和 BY 语句完成的。合并数据集中的观测总数通常小于原始数据集中观测总数的总和。这是因为当公共变量的值匹配时,两个数据集中的变量会作为一个记录合并。
下面给出了合并数据集的两个前提条件:
-
输入数据集必须至少有一个共同变量可用于合并。
-
必须根据用于合并的公共变量对输入数据集进行排序。
Syntax
SAS 中 MERGE 和 BY 语句的基本语法为:
MERGE Data-Set 1 Data-Set 2
BY Common Variable
以下是所用参数的描述 -
-
Data-set1,Data-set2 是连续编写的多个数据集名称。
-
Common Variable 是变量,数据集将根据其匹配值进行合并。
Data Merging
让我们借助示例了解数据合并。
Example
考虑两个 SAS 数据集,一个包含附有姓名和工资的员工 ID,另一个包含附有员工 ID 和部门的员工 ID。在这种情况下,为了获得每个员工的完整信息,我们可以合并这两个数据集。最终数据集仍然对每个员工有一个观测值,但它既包含工资变量,也包含部门变量。
# Data set 1
ID NAME SALARY
1 Rick 623.3
2 Dan 515.2
3 Mike 611.5
4 Ryan 729.1
5 Gary 843.25
6 Tusar 578.6
7 Pranab 632.8
8 Rasmi 722.5
# Data set 2
ID DEPT
1 IT
2 OPS
3 IT
4 HR
5 FIN
6 IT
7 OPS
8 FIN
# Merged data set
ID NAME SALARY DEPT
1 Rick 623.3 IT
2 Dan 515.2 OPS
3 Mike 611.5 IT
4 Ryan 729.1 HR
5 Gary 843.25 FIN
6 Tusar 578.6 IT
7 Pranab 632.8 OPS
8 Rasmi 722.5 FIN
可以使用在 BY 语句中使用公共变量 (ID) 的以下代码来实现上述结果。请注意,两个数据集中的观测值已经在 ID 列中进行排序。
DATA SALARY;
INPUT empid name $ salary ;
DATALINES;
1 Rick 623.3
2 Dan 515.2
3 Mike 611.5
4 Ryan 729.1
5 Gary 843.25
6 Tusar 578.6
7 Pranab 632.8
8 Rasmi 722.5
;
RUN;
DATA DEPT;
INPUT empid dEPT $ ;
DATALINES;
1 IT
2 OPS
3 IT
4 HR
5 FIN
6 IT
7 OPS
8 FIN
;
RUN;
DATA All_details;
MERGE SALARY DEPT;
BY (empid);
RUN;
PROC PRINT DATA = All_details;
RUN;
Merging only the Matches
为了避免结果中的缺失值,我们可以考虑仅保留公共变量值匹配的观测值。可以通过使用 IN 语句实现。需要更改 SAS 程序的合并语句。
Example
在以下示例中, IN = 值仅保留来自数据集 SALARY 和 DEPT 的值匹配的观测值。
DATA All_details;
MERGE SALARY(IN = a) DEPT(IN = b);
BY (empid);
IF a = 1 and b = 1;
RUN;
PROC PRINT DATA = All_details;
RUN;
执行带有上述更改部分的以上 SAS 程序后,会得到以下输出。
1 Rick 623.3 IT
2 Dan 515.2 OPS
4 Ryan 729.1 HR
5 Gary 843.25 FIN
7 Pranab 632.8 OPS
8 Rasmi 722.5 FIN
SAS - Subsetting Data Sets
SAS 数据集的子集是指通过选择较少的变量或较少的观测值,或者同时选择两者,来提取数据集的一部分。虽然通过使用 KEEP 和 DROP 语句对变量进行子集设置,但对观测值进行子集设置是通过使用 DELETE 语句。
而且,子集设置操作产生的结果数据保存在可以用于进一步分析的新数据集中。子集设置主要用于分析数据集中的一部分,而不使用那些与分析无关的变量或观测值。
Subsetting Variables
在此方法中,我们只从整个数据集中提取少数变量。
Syntax
SAS 中子集设置变量的基本语法是:
KEEP var1 var2 ... ;
DROP var1 var2 ... ;
以下是所用参数的描述 -
-
var1 and var2 是需要保留或删除的数据集中的变量名。
Example
考虑下面的 SAS 数据集,其中包含组织的员工详细信息。如果我们仅对从数据集中获取姓名和部门值感兴趣,那么我们可以使用以下代码。
DATA Employee;
INPUT empid ename $ salary DEPT $ ;
DATALINES;
1 Rick 623.3 IT
2 Dan 515.2 OPS
3 Mike 611.5 IT
4 Ryan 729.1 HR
5 Gary 843.25 FIN
6 Tusar 578.6 IT
7 Pranab 632.8 OPS
8 Rasmi 722.5 FIN
;
RUN;
DATA OnlyDept;
SET Employee;
KEEP ename DEPT;
RUN;
PROC PRINT DATA = OnlyDept;
RUN;
当以上代码执行时,我们会得到以下输出:
可以通过删除不需要的变量来获得相同的结果。下面的代码对此进行了说明。
DATA Employee;
INPUT empid ename $ salary DEPT $ ;
DATALINES;
1 Rick 623.3 IT
2 Dan 515.2 OPS
3 Mike 611.5 IT
4 Ryan 729.1 HR
5 Gary 843.25 FIN
6 Tusar 578.6 IT
7 Pranab 632.8 OPS
8 Rasmi 722.5 FIN
;
RUN;
DATA OnlyDept;
SET Employee;
DROP empid salary;
RUN;
PROC PRINT DATA = OnlyDept;
RUN;
Subsetting Observations
在此方法中,我们只从整个数据集中提取少数观测值。
Syntax
我们使用 PROC FREQ,它跟踪为新数据集所选的观测值。
子集设置观测值语法是:
IF Var Condition THEN DELETE ;
以下是所用参数的描述 -
-
Var 是变量的名称,观测值将根据其值通过指定条件删除。
Example
考虑下面的 SAS 数据集,其中包含组织的员工详细信息。如果我们仅对获取工资高于 700 的员工数据感兴趣,则使用以下代码。
DATA Employee;
INPUT empid name $ salary DEPT $ ;
DATALINES;
1 Rick 623.3 IT
2 Dan 515.2 OPS
3 Mike 611.5 IT
4 Ryan 729.1 HR
5 Gary 843.25 FIN
6 Tusar 578.6 IT
7 Pranab 632.8 OPS
8 Rasmi 722.5 FIN
;
RUN;
DATA OnlyDept;
SET Employee;
IF salary < 700 THEN DELETE;
RUN;
PROC PRINT DATA = OnlyDept;
RUN;
当以上代码执行时,我们会得到以下输出:
SAS - Format Data Sets
有时我们希望以不同于数据集中已经存在的格式显示分析后的数据。例如,我们要给带有价格信息的变量添加美元符号和小数点后两位。或者,我们可能想要显示一个全部大写的文本变量。我们可以使用 FORMAT 应用内置 SAS 格式, PROC FORMAT 用于应用用户定义的格式。一个格式还可以应用于多个变量。
Syntax
应用内置 SAS 格式的语法基本语法为:
format variable name format name
以下是所用参数的描述 -
-
variable name 是数据集中使用的变量名称。
-
format name 是应用于变量的数据格式。
Example
让我们考虑下面的 SAS 数据集,其中包含某个组织的员工详细信息。我们希望以大写形式显示所有名称。使用 formatstatement 来实现此目的。
DATA Employee;
INPUT empid name $ salary DEPT $ ;
format name $upcase9. ;
DATALINES;
1 Rick 623.3 IT
2 Dan 515.2 OPS
3 Mike 611.5 IT
4 Ryan 729.1 HR
5 Gary 843.25 FIN
6 Tusar 578.6 IT
7 Pranab 632.8 OPS
8 Rasmi 722.5 FIN
;
RUN;
PROC PRINT DATA = Employee;
RUN;
当以上代码执行时,我们会得到以下输出:
Using PROC FORMAT
我们也可以使用 PROC FORMAT 格式化数据。在下面的示例中,我们将新值分配给变量DEPT扩展部门名称。
DATA Employee;
INPUT empid name $ salary DEPT $ ;
DATALINES;
1 Rick 623.3 IT
2 Dan 515.2 OPS
3 Mike 611.5 IT
4 Ryan 729.1 HR
5 Gary 843.25 FIN
6 Tusar 578.6 IT
7 Pranab 632.8 OPS
8 Rasmi 722.5 FIN
;
proc format;
value $DEP 'IT' = 'Information Technology'
'OPS'= 'Operations' ;
RUN;
PROC PRINT DATA = Employee;
format name $upcase9. DEPT $DEP.;
RUN;
当以上代码执行时,我们会得到以下输出:
SAS - SQL
SAS 通过在 SAS 程序中使用 SQL 查询,为大多数常用的关系型数据库提供广泛的支持。大多数的 ANSI SQL 语法受到支持。使用 PROC SQL 过程来处理 SQL 语句。这个过程不仅可以发送 SQL 查询的结果,还可以创建 SAS 表与变量。将针对所有这些场景提供示例,如下所示。
Syntax
在 SAS 中使用 PROC SQL 的基本语法如下:
PROC SQL;
SELECT Columns
FROM TABLE
WHERE Columns
GROUP BY Columns
;
QUIT;
以下是所用参数的描述 -
-
SQL 查询写在了 PROC SQL 语句之后,然后是 QUIT 语句。
接下来,我们将看到如何将这个 SAS 过程用于在 SQL 中的 CRUD (创建、阅读、更新和删除)操作。
SQL Create Operation
使用 SQL,我们可以从原始数据创建新数据集。在以下示例中,我们首先声明了一个包含原始数据的 TEMP 数据集。然后,我们编写一个 SQL 查询,根据这个数据集中的变量创建表。
DATA TEMP;
INPUT ID $ NAME $ SALARY DEPARTMENT $;
DATALINES;
1 Rick 623.3 IT
2 Dan 515.2 Operations
3 Michelle 611 IT
4 Ryan 729 HR
5 Gary 843.25 Finance
6 Nina 578 IT
7 Simon 632.8 Operations
8 Guru 722.5 Finance
;
RUN;
PROC SQL;
CREATE TABLE EMPLOYEES AS
SELECT * FROM TEMP;
QUIT;
PROC PRINT data = EMPLOYEES;
RUN;
在执行以上代码之后,我们将得到以下结果:
SQL Read Operation
SQL 中的读取操作包括编写 SQL SELECT 查询,以从表中读取数据。在以下示例中,此程序查询位于 SASHELP 库中的名为 CARS 的 SAS 数据集。查询获取了此数据集的一些列。
PROC SQL;
SELECT make,model,type,invoice,horsepower
FROM
SASHELP.CARS
;
QUIT;
在执行以上代码之后,我们将得到以下结果:
SQL UPDATE Operation
我们可以使用 SQL 更新语句来更新 SAS 表。下面我们首先创建一个名为 EMPLOYEES2 的新表,然后使用 SQL UPDATE 语句来更新该表。
DATA TEMP;
INPUT ID $ NAME $ SALARY DEPARTMENT $;
DATALINES;
1 Rick 623.3 IT
2 Dan 515.2 Operations
3 Michelle 611 IT
4 Ryan 729 HR
5 Gary 843.25 Finance
6 Nina 578 IT
7 Simon 632.8 Operations
8 Guru 722.5 Finance
;
RUN;
PROC SQL;
CREATE TABLE EMPLOYEES2 AS
SELECT ID as EMPID,
Name as EMPNAME ,
SALARY as SALARY,
DEPARTMENT as DEPT,
SALARY*0.23 as COMMISION
FROM TEMP;
QUIT;
PROC SQL;
UPDATE EMPLOYEES2
SET SALARY = SALARY*1.25;
QUIT;
PROC PRINT data = EMPLOYEES2;
RUN;
在执行以上代码之后,我们将得到以下结果:
SAS - ODS
SAS 程序的输出可以转换为用户更友好的形式,例如 .html 或 PDF. 这是通过使用 SAS 中提供的 ODS 语句来完成的。ODS 代表 output delivery system. 它主要用于将 SAS 程序的输出数据格式化为美观的报告,这些报告易于查看和理解。这也帮助与其他平台和软件共享输出。它还可以将多个 PROC 语句的结果组合到一个文件中。
Syntax
在 SAS 中使用 ODS 语句的基本语法是 −
ODS outputtype
PATH path name
FILE = Filename and Path
STYLE = StyleName
;
PROC some proc
;
ODS outputtype CLOSE;
以下是所用参数的描述 -
-
PATH 表示在 HTML 输出情况下使用的语句。在其他类型的输出中,我们在 filename 中包含路径。
-
Style 代表 SAS 环境中可用的内置样式之一。
Creating HTML Output
我们使用 ODS HTML 语句创建 HTML 输出。在下面的示例中,我们在所需的路径中创建了一个 HTML 文件。我们应用样式库中可用的样式。我们可以看到指定路径中的输出文件,也可以下载此文件并将其保存在与 SAS 环境不同的环境中。请注意,我们有两个 proc SQL 语句,并且它们的输出都将被捕捉到一个文件中。
ODS HTML
PATH = '/folders/myfolders/sasuser.v94/TutorialsPoint/'
FILE = 'CARS2.html'
STYLE = EGDefault;
proc SQL;
select make, model, invoice
from sashelp.cars
where make in ('Audi','BMW')
and type = 'Sports'
;
quit;
proc SQL;
select make,mean(horsepower)as meanhp
from sashelp.cars
where make in ('Audi','BMW')
group by make;
quit;
ODS HTML CLOSE;
在执行以上代码之后,我们将得到以下结果:
Creating PDF Output
在下面的示例中,我们在所需的路径中创建了一个 PDF 文件。我们应用样式库中可用的样式。我们可以看到指定路径中的输出文件,也可以下载此文件并将其保存在与 SAS 环境不同的环境中。请注意,我们有两个 proc SQL 语句,并且它们的输出都将被捕捉到一个文件中。
ODS PDF
FILE = '/folders/myfolders/sasuser.v94/TutorialsPoint/CARS2.pdf'
STYLE = EGDefault;
proc SQL;
select make, model, invoice
from sashelp.cars
where make in ('Audi','BMW')
and type = 'Sports'
;
quit;
proc SQL;
select make,mean(horsepower)as meanhp
from sashelp.cars
where make in ('Audi','BMW')
group by make;
quit;
ODS PDF CLOSE;
在执行以上代码之后,我们将得到以下结果:
Creating TRF(Word) Output
在下面的示例中,我们在所需的路径中创建了一个 RTF 文件。我们应用样式库中可用的样式。我们可以看到指定路径中的输出文件,也可以下载此文件并将其保存在与 SAS 环境不同的环境中。请注意,我们有两个 proc SQL 语句,并且它们的输出都将被捕捉到一个文件中。
ODS RTF
FILE = '/folders/myfolders/sasuser.v94/TutorialsPoint/CARS.rtf'
STYLE = EGDefault;
proc SQL;
select make, model, invoice
from sashelp.cars
where make in ('Audi','BMW')
and type = 'Sports'
;
quit;
proc SQL;
select make,mean(horsepower)as meanhp
from sashelp.cars
where make in ('Audi','BMW')
group by make;
quit;
ODS rtf CLOSE;
在执行以上代码之后,我们将得到以下结果:
SAS - Simulations
模拟是一种计算技术,它对许多不同的随机样本使用重复计算来估计统计量。使用 SAS,我们可以模拟复杂的数据,这些数据在现实世界系统中具有特定的统计特性。我们使用软件来构建系统模型,并以数值方式生成数据,以更好地了解现实世界系统的行为。设计计算机模拟模型的艺术的一部分是决定哪些方面的生活系统有必要包含在模型中,以便根据该模型生成的数据可以用来做出有效的决策。由于这种复杂性,SAS 专门为模拟提供了软件组件。
用于创建 SAS 模拟的 SAS 软件组件称为 SAS Simulation Studio 。其图形用户界面提供了一整套用于构建、执行和分析离散事件模拟模型结果的工具。
可对 SAS 模拟应用的不同类型的统计分布如下:
-
从连续分布中模拟数据
-
从离散分布中模拟数据
-
从混合分布中模拟数据
-
从复杂分布中模拟数据
-
从多元分布中模拟数据
-
APPROXIMATE A SAMPLING DISTRIBUTION
-
ASSESS REGRESSION ESTIMATES
SAS - Histograms
直方图是使用不同高度的条来显示数据的图形。它将数据集中不同的数字分组到多个范围内。它还表示连续变量的分布概率的估计值。在 SAS 中, PROC UNIVARIATE 用于使用以下选项创建直方图。
Syntax
在 SAS 中创建直方图的基本语法是 −
PROC UNIVARAITE DATA = DATASET;
HISTOGRAM variables;
RUN;
-
DATASET 是所用数据集的名称。
-
variables 是用于绘制直方图的值。
SAS - Bar Charts
条形图以矩形条形式表示数据,条的长度与变量的值成比例。SAS 使用过程 PROC SGPLOT 创建条形图。我们可以在条形图中绘制简单的条形和堆叠条形。在条形图中,每个条形都可以赋予不同的颜色。
Syntax
创建柱状图的基本 SAS 语法为:
PROC SGPLOT DATA = DATASET;
VBAR variables;
RUN;
-
DATASET − 是所用数据集的名称。
-
variables − 是用于绘制直方图的值。
SAS - Pie Charts
饼图是用不同颜色的圆形切片表示值的表示形式。切片带有标签,并且与每个切片相对应的数字也显示在图表中。
在 SAS 中,饼图是使用 PROC TEMPLATE 创建的,它采用参数来控制百分比、标签、颜色、标题等。
Syntax
在 SAS 中创建饼图的基本语法为:
PROC TEMPLATE;
DEFINE STATGRAPH pie;
BEGINGRAPH;
LAYOUT REGION;
PIECHART CATEGORY = variable /
DATALABELLOCATION = OUTSIDE
CATEGORYDIRECTION = CLOCKWISE
START = 180 NAME = 'pie';
DISCRETELEGEND 'pie' /
TITLE = ' ';
ENDLAYOUT;
ENDGRAPH;
END;
RUN;
-
variable 是我们为其创建饼图的值。
Simple Pie Chart
在此饼图中,我们从数据集中获取单个变量形式。饼图的创建方式是,切片的价值表示相对于变量的总价值的变量计数分数。
Example
在下面的示例中,每个切片表示来自汽车总数的汽车类型的分数。
PROC SQL;
create table CARS1 as
SELECT make, model, type, invoice, horsepower, length, weight
FROM
SASHELP.CARS
WHERE make in ('Audi','BMW')
;
RUN;
PROC TEMPLATE;
DEFINE STATGRAPH pie;
BEGINGRAPH;
LAYOUT REGION;
PIECHART CATEGORY = type /
DATALABELLOCATION = OUTSIDE
CATEGORYDIRECTION = CLOCKWISE
START = 180 NAME = 'pie';
DISCRETELEGEND 'pie' /
TITLE = 'Car Types';
ENDLAYOUT;
ENDGRAPH;
END;
RUN;
PROC SGRENDER DATA = cars1
TEMPLATE = pie;
RUN;
当我们执行以上代码时,我们将得到以下输出:
Pie Chart with Data Labels
在此饼图中,我们同时表示每个切片的数值分数和百分比值。我们还将标签的位置更改为图表内部。通过使用 DATASKIN 选项修改图表的外观风格。它使用 SAS 环境中可用的其中一种内置风格。
Example
PROC TEMPLATE;
DEFINE STATGRAPH pie;
BEGINGRAPH;
LAYOUT REGION;
PIECHART CATEGORY = type /
DATALABELLOCATION = INSIDE
DATALABELCONTENT = ALL
CATEGORYDIRECTION = CLOCKWISE
DATASKIN = SHEEN
START = 180 NAME = 'pie';
DISCRETELEGEND 'pie' /
TITLE = 'Car Types';
ENDLAYOUT;
ENDGRAPH;
END;
RUN;
PROC SGRENDER DATA = cars1
TEMPLATE = pie;
RUN;
当我们执行以上代码时,我们将得到以下输出:
Grouped Pie Chart
在此饼图中,图表中显示的变量值根据同一数据集中另一个变量分组。每组成为一个圆圈,并且该图表拥有尽可能多的同心圆,就像可用组的数量一样。
Example
在下面的示例中,我们按照名为“Make”的变量对图表进行分组。由于有两个可用值(“奥迪”和“宝马”),所以我们会得到两个同心圆,每个同心圆都代表各自品牌中的汽车类型。
PROC TEMPLATE;
DEFINE STATGRAPH pie;
BEGINGRAPH;
LAYOUT REGION;
PIECHART CATEGORY = type / Group = make
DATALABELLOCATION = INSIDE
DATALABELCONTENT = ALL
CATEGORYDIRECTION = CLOCKWISE
DATASKIN = SHEEN
START = 180 NAME = 'pie';
DISCRETELEGEND 'pie' /
TITLE = 'Car Types';
ENDLAYOUT;
ENDGRAPH;
END;
RUN;
PROC SGRENDER DATA = cars1
TEMPLATE = pie;
RUN;
当我们执行以上代码时,我们将得到以下输出:
SAS - Scatter Plots
散点图是一种使用笛卡尔平面上绘制的两个变量的值的图形。它通常用于找出两个变量之间的关系。在 SAS 中,我们使用 PROC SGSCATTER 来创建散点图。
请注意,我们在第一个示例中创建名为 CARS1 的数据集,并为所有后续数据集使用相同的数据集。此数据集在 SAS 会话结束之前一直保留在工作库中。
Syntax
在 SAS 中创建散点图的基本语法是 −
PROC sgscatter DATA = DATASET;
PLOT VARIABLE_1 * VARIABLE_2
/ datalabel = VARIABLE group = VARIABLE;
RUN;
以下是所用参数的描述 −
-
DATASET 是数据集的名称。
-
VARIABLE 是从数据集中使用的变量。
Simple Scatterplot
在简单的散点图中,我们从数据集中选择两个变量,并根据第三个变量将其分组。我们还可以标记这些数据。结果显示了两个变量在 Cartesian plane. 中的分散情况
Example
PROC SQL;
create table CARS1 as
SELECT make, model, type, invoice, horsepower, length, weight
FROM
SASHELP.CARS
WHERE make in ('Audi','BMW')
;
RUN;
TITLE 'Scatterplot - Two Variables';
PROC sgscatter DATA = CARS1;
PLOT horsepower*Invoice
/ datalabel = make group = type grid;
title 'Horsepower vs. Invoice for car makers by types';
RUN;
当我们执行以上代码时,我们将得到以下输出:
SAS - Box Plots
箱形图是通过四分位数对数字数据集组的图形表示。箱形图还可能具有从箱形垂直延伸的线条(晶须),表示上下四分位数之外的可变性。箱体的底部和顶部始终是第一和第三四分位数,箱体内的带始终是第二四分位数(中位数)。在 SAS 中,使用 PROC SGPLOT 创建简单的箱形图,使用 PROC SGPANEL 创建面板箱形图。
请注意,我们在第一个示例中创建名为 CARS1 的数据集,并为所有后续数据集使用相同的数据集。此数据集在 SAS 会话结束之前一直保留在工作库中。
Syntax
在 SAS 中创建箱形图的基本语法是 −
PROC SGPLOT DATA = DATASET;
VBOX VARIABLE / category = VARIABLE;
RUN;
PROC SGPANEL DATA = DATASET;;
PANELBY VARIABLE;
VBOX VARIABLE> / category = VARIABLE;
RUN;
-
DATASET − 是所用数据集的名称。
-
VARIABLE − 是用于绘制箱形图的值。
Simple Boxplot
在简单的箱形图中,我们从数据集选择一个变量和另一个变量以形成一个类别。第一个变量的值根据第二个变量中不同值的数量分为许多组。
Example
在下面的示例中,我们将变量马力选为第一个变量,类型选为类别变量。因此,我们得到了对每种类型的汽车的马力值分布的箱形图。
PROC SQL;
create table CARS1 as
SELECT make, model, type, invoice, horsepower, length, weight
FROM
SASHELP.CARS
WHERE make in ('Audi','BMW')
;
RUN;
PROC SGPLOT DATA = CARS1;
VBOX horsepower
/ category = type;
title 'Horsepower of cars by types';
RUN;
当我们执行以上代码时,我们将得到以下输出:
Boxplot in Vertical Panels
我们可以将变量的箱形图分成许多垂直面板(列)。每个面板都包含所有分类变量的箱形图。但是,箱形图使用另一个第三个变量进行进一步分组,该变量将图分成多个面板。
Boxplot in Horizontal Panels
我们可以将变量的箱形图分成许多水平面板(行)。每个面板都包含所有分类变量的箱形图。但是,箱形图使用另一个第三个变量进行进一步分组,该变量将图分成多个面板。在下面的示例中,我们使用变量“品牌”将图形进行了面板划分。由于“品牌”有两个不同的值,因此我们得到了两个水平面板。
PROC SGPANEL DATA = CARS1;
PANELBY MAKE / columns = 1 novarname;
VBOX horsepower / category = type;
title 'Horsepower of cars by types';
RUN;
当我们执行以上代码时,我们将得到以下输出:
SAS - Arithmetic Mean
算术平均值是通过对数字变量的值求和,然后将总和除以变量个数获得的值。它也称为平均值。在 SAS 中,算术平均值使用 PROC MEANS 计算。使用此 SAS 过程,我们可以找到所有变量或数据集的某些变量的平均值。我们还可以形成组并找到特定于该组的值的变量的平均值。
Syntax
在 SAS 中计算算术平均值的基本语法是 −
PROC MEANS DATA = DATASET;
CLASS Variables ;
VAR Variables;
以下是所用参数的描述 −
-
DATASET − 是所用数据集的名称。
-
Variables − 是数据集中变量的名称。
SAS - Standard Deviation
标准差 (SD) 是衡量数据集中数据差异程度的指标。从数学上讲,它衡量了每个值与数据集的平均值距离有多远或有多近。接近 0 的标准差值表示数据点趋于非常接近数据集的平均值,而较高的标准差表示数据点分布在较宽的值范围内
在 SAS 中,SD 值使用 PROC MEAN 和 PROC SURVEYMEANS 测量。
SAS - Frequency Distributions
频数分布是一个表,其中显示了数据集中的数据点的频数。表中的每个条目均包含某个特定群组或区间中的值出现的频数或计数,并且以这种方式,该表总结了样本中的值分布。
SAS 提供了一个名为 PROC FREQ 的步骤来计算数据集中的数据点的频数分布。
Syntax
在 SAS 中计算频数分布的基本语法如下:
PROC FREQ DATA = Dataset ;
TABLES Variable_1 ;
BY Variable_2 ;
以下是所用参数的描述 -
-
Dataset 是数据集的名称。
-
Variables_1 是其频数分布需要计算的数据集的变量名称。
-
Variables_2 是对频数分布结果进行分类的变量。
Single Variable Frequency Distribution
我们可以使用 PROC FREQ. 确定单个变量的频数分布。在这种情况下,结果将显示变量的每个值的频数。结果还显示百分比分布、累积频数和累积百分比。
Example
在以下示例中,我们找到名为 CARS1 的数据集的马力变量的频数分布,该数据集是从库 SASHELP.CARS. 创建的。我们可以看到结果划分为两类。一类是汽车的每个品牌。
PROC SQL;
create table CARS1 as
SELECT make, model, type, invoice, horsepower, length, weight
FROM
SASHELP.CARS
WHERE make in ('Audi','BMW')
;
RUN;
proc FREQ data = CARS1 ;
tables horsepower;
by make;
run;
在执行以上代码后,我们将得到以下结果:
SAS - Cross Tabulations
交叉制表包括使用两个或更多变量的所有可能的组合来生成交叉表,也称为列联表。在 SAS 中,它是使用 PROC FREQ 与 TABLES 选项一起创建的。例如 - 如果我们需要每个车型类别中每个品牌的每种车型的频率,那么我们需要使用 PROC FREQ 的 TABLES 选项。
Syntax
在 SAS 中应用交叉制表的语法基本语法为:
PROC FREQ DATA = dataset;
TABLES variable_1*Variable_2;
以下是所用参数的描述 -
-
Dataset 是数据集的名称。
-
Variable_1 and Variable_2 是数据集的变量名称,需要计算频率分布。
Example
考虑查找在从 SASHELP.CARS 创建的数据集汽车 1 中,每个汽车品牌下有多少车型,如下所示。在这种情况下,我们需要各个频率值以及跨品牌和跨车型的频率值总数。我们可以观察到结果跨行和列显示值。
PROC SQL;
create table CARS1 as
SELECT make, type, invoice, horsepower, length, weight
FROM
SASHELP.CARS
WHERE make in ('Audi','BMW')
;
RUN;
proc FREQ data = CARS1;
tables make*type;
run;
在执行以上代码后,我们将得到以下结果:
SAS - T Tests
执行 T 检验是通过比较样本均值和均差来计算一个样本或两个独立样本的置信限度的。名为 PROC TTEST 的 SAS 程序用于对单个变量和变量对执行 t 检验。
Syntax
在 SAS 中应用 PROC TTEST 的基本语法是 −
PROC TTEST DATA = dataset;
VAR variable;
CLASS Variable;
PAIRED Variable_1 * Variable_2;
以下是所用参数的描述 -
-
Dataset 是数据集的名称。
-
Variable_1 and Variable_2 是 t 检验中使用的数据集的变量名称。
Example
下面我们看到一个样本 t 检验,其中找到具有 95% 置信限度的变量马力的 t 检验估计值。
PROC SQL;
create table CARS1 as
SELECT make, type, invoice, horsepower, length, weight
FROM
SASHELP.CARS
WHERE make in ('Audi','BMW')
;
RUN;
proc ttest data = cars1 alpha = 0.05 h0 = 0;
var horsepower;
run;
在执行以上代码后,我们将得到以下结果:
SAS - Correlation Analysis
相关分析处理变量之间的关系。相关系数是两个变量之间线性关系的度量。相关系数的值始终介于 -1 和 +1 之间。SAS 提供了过程 PROC CORR 在数据集的变量对之间查找相关系数。
Syntax
在 SAS 中应用 PROC CORR 的基本语法为:
PROC CORR DATA = dataset options;
VAR variable;
以下是所用参数的描述 -
-
Dataset 是数据集的名称。
-
Options 是过程的其他选项,如绘图矩阵等。
-
Variable 是在查找相关性时使用的数据集的变量名。
Example
可以通过在 VAR 语句中使用名称来获取数据集中变量对之间的相关系数。在下面的示例中,我们使用数据集 CARS1 并获得显示马力和重量之间的相关系数的结果。
PROC SQL;
create table CARS1 as
SELECT invoice, horsepower, length, weight
FROM
SASHELP.CARS
WHERE make in ('Audi','BMW')
;
RUN;
proc corr data = cars1 ;
VAR horsepower weight ;
BY make;
run;
在执行以上代码后,我们将得到以下结果:
SAS - Linear Regression
线性回归用于识别因变量与一个或多个自变量之间的关系。提出了关系模型,参数值的估计值用来开发估计回归方程式。
然后使用各种检验来确定模型是否令人满意。如果是,那么估计回归方程可以用来预测给定自变量值时的因变量值。在 SAS 中,过程 PROC REG 用于发现两个变量之间的线性回归模型。
Syntax
在 SAS 中应用 PROC REG 的基本语法是:
PROC REG DATA = dataset;
MODEL variable_1 = variable_2;
以下是所用参数的描述 -
-
Dataset 是数据集的名称。
-
*variable_1 和 variable_2 * 是用于发现相关性的数据集的变量名称。
Example
下面的示例演示了使用 PROC REG. 发现汽车马力和重量这两个变量之间的相关性的过程。在结果中,我们看到截距值,可以用它来形成回归方程式。
PROC SQL;
create table CARS1 as
SELECT invoice, horsepower, length, weight
FROM
SASHELP.CARS
WHERE make in ('Audi','BMW')
;
RUN;
proc reg data = cars1;
model horsepower = weight ;
run;
在执行以上代码后,我们将得到以下结果:
以上的代码还给出了模型的各种估计的图形视图,如下所示。作为一个高级的 SAS 过程,它不仅仅停留在给出典值作为输出。
SAS - Bland Altman Analysis
Bland-Altman 分析是一个验证两个旨在测量相同参数的方法之间的一致或不一致程度的过程。方法之间的相关性越高,表明数据分析中选择了足够好的样本。在 SAS 中,我们通过计算变量值的均值、上限和下限来创建 Bland-Altman 图。然后,我们使用 PROC SGPLOT 创建 Bland-Altman 图。
Syntax
在 SAS 中应用 PROC SGPLOT 的基本语法是 −
PROC SGPLOT DATA = dataset;
SCATTER X = variable Y = Variable;
REFLINE value;
以下是所用参数的描述 -
-
Dataset 是数据集的名称。
-
SCATTER 语句创建以 X 和 Y 形式提供的值的散点图。
-
*REFLINE * 创建水平或垂直参考线。
Example
在以下示例中,我们采用由新旧两种方法产生的两个实验结果。我们计算变量值的差异以及相同观测值的变量均值。我们还计算标准差值,以用于计算的上限和下限。
结果显示 Bland-Altman 图为散点图。
data mydata;
input new old;
datalines;
31 45
27 12
11 37
36 25
14 8
27 15
3 11
62 42
38 35
20 9
35 54
62 67
48 25
77 64
45 53
32 42
16 19
15 27
22 9
8 38
24 16
59 25
;
data diffs ;
set mydata ;
/* calculate the difference */
diff = new-old ;
/* calculate the average */
mean = (new+old)/2 ;
run ;
proc print data = diffs;
run;
proc sql noprint ;
select mean(diff)-2*std(diff), mean(diff)+2*std(diff)
into :lower, :upper
from diffs ;
quit;
proc sgplot data = diffs ;
scatter x = mean y = diff;
refline 0 &upper &lower / LABEL = ("zero bias line" "95% upper limit" "95%
lower limit");
TITLE 'Bland-Altman Plot';
footnote 'Accurate prediction with 10% homogeneous error';
run ;
quit ;
在执行以上代码后,我们将得到以下结果:
Enhanced Model
在上述程序的增强模型中,我们得到了 95% 置信水平曲线拟合。
proc sgplot data = diffs ;
reg x = new y = diff/clm clmtransparency = .5;
needle x = new y = diff/baseline = 0;
refline 0 / LABEL = ('No diff line');
TITLE 'Enhanced Bland-Altman Plot';
footnote 'Accurate prediction with 10% homogeneous error';
run ;
quit ;
在执行以上代码后,我们将得到以下结果:
SAS - Chi Square
卡方检验用于检查两个分类变量之间的关联关系。它可以用来检验变量之间的独立性程度和相关性程度。SAS 将 PROC FREQ 与选项 chisq 一同使用,以确定卡方检验的结果。
Syntax
在 SAS 中,用于卡方检验的 PROC FREQ 的基本语法如下:
PROC FREQ DATA = dataset;
TABLES variables
/CHISQ TESTP = (percentage values);
以下是所用参数的描述 -
-
Dataset 是数据集的名称。
-
Variables 是卡方检验中所用数据集的变量名称。
-
TESTP 语句中的 Percentage Values 表示变量级别的百分比。
SAS - Fishers Exact Tests
SAS - Repeated Measure Analysis
当一个随机样本的所有成员都在许多不同条件下进行测量时,就要使用重复测量分析。由于样本依次受到每个条件,对因变量的测量会重复进行。在这种情况下,使用标准方差分析不合适,因为它无法对重复测量之间的相关性进行建模。
你应该明确 repeated measures design 和 simple multivariate design. 之间的区别。对于这两种,都会多次对样本成员测量(或试验),但在重复测量设计中,每次试验都代表对相同特征在不同条件下的测量。
PROC GLM 在 SAS 中用来执行重复测量分析。
Syntax
PROC GLM 在 SAS 中的基本语法为 −
PROC GLM DATA = dataset;
CLASS variable;
MODEL variables = group / NOUNI;
REPEATED TRIAL n;
以下是所用参数的描述 -
-
dataset 是数据集的名称。
-
CLASS 给出变量;此变量用作分类变量。
-
MODEL 使用数据集中的特定变量定义要拟合的模型。
-
REPEATED 定义每个组的重复测量数来检验假设。
Example
看下面的例子,其中有两组人经受针对一种药物效果的测试。每次对每个人的反应时间都会记录下来,针对四种经过测试的药物类型。在这里,对每组每个人进行 5 次试验来查看四种药物类型的影响之间的相关性。
DATA temp;
INPUT person group $ r1 r2 r3 r4;
CARDS;
1 A 2 1 6 5
2 A 5 4 11 9
3 A 6 14 12 10
4 A 2 4 5 8
5 A 0 5 10 9
6 B 9 11 16 13
7 B 12 4 13 14
8 B 15 9 13 8
9 B 6 8 12 5
10 B 5 7 11 9
;
RUN;
PROC PRINT DATA = temp ;
RUN;
PROC GLM DATA = temp;
CLASS group;
MODEL r1-r4 = group / NOUNI ;
REPEATED trial 5;
RUN;
在执行以上代码后,我们将得到以下结果:
SAS - One Way Anova
ANOVA 表示方差分析。在 SAS 中,它通过使用 PROC ANOVA 完成。它分析来自各种实验设计的的数据。在此过程中,会测量在通过分类变量(也即自变量)识别的实验条件下的连续响应变量(也即因变量)。响应中的变异被认为归因于分类中的效应,随机误差解释了剩余的变异。
Syntax
在 SAS 中,用于 PROC ANOVA 的基本语法如下:
PROC ANOVA dataset ;
CLASS Variable;
MODEL Variable1 = variable2 ;
MEANS ;
以下是所用参数的描述 -
-
dataset 是数据集的名称。
-
CLASS 给出变量;此变量用作分类变量。
-
MODEL 定义使用自数据集的特定变量拟合的模型。
-
Variable_1 and Variable_2 是分析中使用的变量数据集的变量名。
-
MEANS 定义了计算和均值比较的类型。
SAS - Hypothesis Testing
假设检验是用统计数据确定给定假设为真的概率。假设检验的通常过程由以下四步组成。
Step-4
将 p 值与可接受的显著性值 alpha(有时称为 alpha 值)比较。如果 p ⇐alpha,即观测效应具有统计显着性,则排除原假设,而备择假设有效。
SAS 编程语言具有执行各种类型假设检验的功能,如下所示。
Test |
Description |
SAS PROC |
T-Test |
当需要检验一个变量的均值是否显著不同于一个假设值时,使用 t检验。我们还确定两个独立组的均值是否存在显著差异,以及从属组或配对组的均值是否显著不同。 |
PROC TTEST |
ANOVA |
当存在一个独立分类变量时,它也会用于比较均值。在检验以确定间隔相关变量的均值是否根据独立分类变量而不同时,我们将使用单因素方差分析。 |
PROC ANOVA |
Chi-Square |
我们使用卡方优度拟合来评估分类变量的频率是否可能因偶然因素而发生。当分类变量的比例是假设值时,必须使用卡方检验。 |
PROC FREQ |
Linear Regression |
当想要检验一个变量如何预测另一个变量时,使用简单线性回归。多元线性回归允许检验多个变量如何预测感兴趣的变量。在使用多元线性回归时,我们另外还假设预测变量是独立的。 |
PROC REG |