SAS - 快速指南


SAS - 概述

SAS代表统计分析软件。它由 SAS 研究所于 1960 年创建。从 1960 年 1 月 1 日起,SAS 用于数据管理、商业智能、预测分析、描述性和规范性分析等。从那时起,软件中引入了许多新的统计过程和组件。

随着用于统计的 JMP(跳转)的引入,SAS 利用了Macintosh 引入的图形用户界面。Jump 基本上用于六西格码、设计、质量控制以及工程和科学分析等应用。

SAS 是独立于平台的,这意味着您可以在任何操作系统(Linux 或 Windows)上运行 SAS。SAS 由 SAS 程序员驱动,他们在 SAS 数据集上使用多个操作序列来生成正确的数据分析报告。

多年来,SAS 为其产品组合添加了众多解决方案。它提供数据治理、数据质量、大数据分析、文本挖掘、欺诈管理、健康科学等解决方案。我们可以放心地假设 SAS 为每个业务领域都有解决方案。

要浏览可用产品列表,您可以访问SAS Components

为什么我们使用 SAS

SAS 基本上适用于大型数据集。借助 SAS 软件,您可以对数据执行各种操作,例如 -

  • 数据管理
  • 统计分析
  • 具有完美图形的报告形成
  • 商业计划
  • 运筹学和项目管理
  • 品质提升
  • 应用开发
  • 数据提取
  • 数据转换
  • 数据更新和修改

如果我们谈论 SAS 的组件,那么 SAS 中有 200 多个可用组件。

先生。 SAS组件及其用途
1

基础SAS

它是一个核心组件,包含数据管理工具和用于数据分析的编程语言。它也是应用最广泛的。

2

SAS/图表

创建图表、演示文稿,以便更好地理解并以正确的格式展示结果。

3

SAS/STAT

通过方差分析、回归、多变量分析、生存分析、心理测量分析、混合模型分析进行统计分析。

4

SAS/或

行动调查。

5

SAS/ETS

计量经济学和时间序列分析。

6

SAS/IML

C交互式矩阵语言。

7

SAS/空军

应用设施。

8

SAS/QC

质量控制。

9

SAS/洞察力

数据挖掘。

10

SAS/PH

临床试验分析。

11

SAS/企业矿工

数据挖掘。

SAS 软件的类型

  • Windows 或 PC SAS
  • SAS EG(企业指南)
  • SAS EM(企业矿工,即用于预测分析)
  • SAS 意味着
  • SAS 统计

我们主要在组织和培训机构中使用 Window SAS。一些组织使用 Linux,但没有图形用户界面,因此您必须为每个查询编写代码。但是在window SAS中,有很多可用的实用程序,这对程序员很有帮助,也减少了编写代码的时间。

SaaS 窗口有 5 个部分。

先生。 SAS 窗口及其用法
1

日志窗口

日志窗口就像一个执行窗口,我们可以在其中检查SAS程序的执行情况。在此窗口中我们还可以检查错误。每次运行程序后检查日志窗口非常重要。这样我们就可以正确的了解我们程序的执行情况。

2

编辑器窗口

编辑器窗口是 SAS 的一部分,我们在其中编写所有代码。它就像一个记事本。

3

输出窗口

输出窗口是结果窗口,我们可以在其中看到程序的输出。

4

结果窗口

它就像所有输出的索引。我们在 SAS 一个会话中运行的所有程序都列在那里,您可以通过单击输出结果来打开输出。但这些只在 SAS 的一次会议上被提及。如果我们关闭软件然后打开它,结果窗口将为空。

5

探索窗口

这里列出了所有库。您还可以从此处浏览系统 SAS 支持的文件。

SAS 中的库

库就像 SAS 中的存储。您可以创建一个库并将所有类似的程序保存在该库中。SAS 为您提供了创建多个库的工具。SAS 库只有 8 个字符长。

SAS 中有两种类型的库可用 -

先生。 SAS 窗口及其用法
1

临时或工作图书馆

这是 SAS 的默认库。如果我们不为它们分配任何其他库,我们创建的所有程序都存储在该工作库中。您可以在浏览窗口中检查该工作库。如果您创建 SAS 程序并且尚未为其分配任何永久库,那么如果您结束会话之后再次启动软件,则该程序将不会在工作库中。因为只要会话进行,它就会存在于工作库中。

2

常设图书馆

这些是 SAS 的永久库。我们可以通过使用 SAS 实用程序或在编辑器窗口中编写代码来创建新的 SAS 库。这些库被命名为永久库,因为如果我们在 SAS 中创建一个程序并将其保存在这些永久库中,那么只要我们需要它们,它们就可以使用。

SAS - 环境

SAS Institute Inc. 发布了免费的SAS University Edition,足以学习 SAS 编程。它提供了您在 BASE SAS 编程中需要学习的所有功能,从而使您能够学习任何其他 SAS 组件。

下载和安装 SAS University Edition 的过程非常简单。它可以作为需要在虚拟环境中运行的虚拟机使用。您需要先在 PC 中安装虚拟化软件,然后才能运行 SAS 软件。在本教程中,我们将使用VMware。以下是下载、设置 SAS 环境和验证安装的步骤的详细信息。

下载 SAS 大学版

SAS University Edition可从 URL SAS University Edition下载。在开始下载之前,请向下滚动以阅读系统要求。访问此 URL 时会出现以下屏幕。

SAS_environment_download_link

设置虚拟化软件

在同一页面上向下滚动以找到安装 stpe-1。此步骤提供获取适合您的虚拟化软件的链接。如果您的系统中已经安装了这些软件中的任何一个,则可以跳过此步骤。

SAS_environment2_vm_options

快速启动虚拟化软件

如果您对虚拟化环境完全陌生,您可以通过步骤 2 中提供的以下指南和视频来熟悉它。如果您已经熟悉的话,您可以再次跳过此步骤。

SAS_environment3_vm_guides_videos

下载 Zip 文件

在步骤 3 中,您可以选择与您所拥有的虚拟化环境兼容的 SAS University Edition 的适当版本。它以 zip 文件形式下载,名称类似于 unvbasicvapp__9411005__vmx__en__sp0__1.zip

SAS_environment4_vm_download

解压 zip 文件

需要解压上面的 zip 文件并将其存储在适当的目录中。在我们的例子中,我们选择了 VMware zip 文件,解压后显示以下文件。

SAS_environment5_file_unzip

加载虚拟机

启动VMware播放器(或工作站)并打开以扩展名.vmx结尾的文件。出现以下屏幕。请注意分配给虚拟机的内存和硬盘空间等基本设置。

SAS_environment6_vm_machine

打开虚拟机电源

单击绿色箭头标记旁边的“启动此虚拟机”以启动虚拟机。出现以下屏幕。

SAS_environment7_vm_machine_poweron

当 SAS 虚拟机处于加载状态时,会出现以下屏幕,之后运行的虚拟机会提示转到将打开 SAS 环境的 URL 位置。

SAS_environment8_vm_running

启动 SAS 工作室

打开一个新的浏览器选项卡并加载上述 URL(每台电脑的 URL 有所不同)。出现以下屏幕,表明 SAS 环境已准备就绪。

SAS_environment9_vm_start_studio

SAS 环境

单击“启动 SAS Studio”后,我们将获得 SAS 环境,默认情况下该环境以可视化编程器模式打开,如下所示。

SAS_environment10_vm_visual_programming

我们还可以通过单击下拉菜单将其更改为 SAS 程序员模式。

SAS_environment11_vm_SAS_Programmer

现在我们准备编写 SAS 程序。

SAS - 用户界面

SAS 程序是使用称为SAS Studio 的用户界面创建的。

下面是各种窗口及其用法的描述。

SAS 主窗口

这是您进入 SAS 环境时看到的窗口。左侧是导航窗格,用于导航各种编程功能。右侧是工作区,用于编写代码并执行代码。

ui_main_screen1.JPG

代码自动完成

这是一个非常强大的功能,有助于获取 SAS 关键字的正确语法,并提供该关键字的文档链接。

ui_program_code2.JPG

程序执行

代码的执行是通过按运行图标(左侧第一个图标)或 F3 按钮来完成的。

ui_program_run_4.JPG

程序日志

已执行代码的日志可在“日志”选项卡下找到。它描述了有关程序执行的错误、警告或注释。您可以在该窗口中获取对代码进行故障排除的所有线索。

ui_program_log_5.JPG

计划结果

代码执行的结果可以在“结果”选项卡中看到。默认情况下,它们的格式为 html 表格。

ui_program_result_6.JPG

程序选项卡

导航区域包含创建和管理程序的功能。它还提供了与您的程序一起使用的预构建功能。

服务器文件和文件夹

在此选项卡下,我们可以创建其他程序、导入要分析的数据以及查询现有数据。它还可用于创建文件夹快捷方式。

ui_program_multiple_7.JPG

任务

“任务”选项卡提供了通过仅提供输入变量来使用内置 SAS 程序的功能。例如,在统计文件夹下,您可以找到一个 SAS 程序,只需提供 SAS 数据集名称和变量名称即可进行线性回归。

ui_program_tasks_8.JPG

片段

片段选项卡提供了编写 SAS 宏并从现有数据集生成文件的功能

ui_program_snippets_9.JPG

程序库

SAS 将数据集存储在 SAS 库中。临时库仅可用于单个会话,其名称为 WORK。但永久图书馆始终可用。

ui_program_libraries_10.JPG

文件快捷方式

此选项卡用于访问存储在 SAS 环境外部的文件。此类文件的快捷方式存储在此选项卡下。

ui_program_file_shortcuts_11.JPG

SAS - 程序结构

SAS 编程涉及首先创建数据集/将数据集读入内存,然后对该数据进行分析。我们需要了解为实现此目的而编写程序的流程。

SAS 程序结构

下图显示了按照给定顺序编写的创建 SAS 程序的步骤。

ps_flow_1

每个SAS程序都必须具备所有这些步骤来完成读取输入数据、分析数据并给出分析的输出。此外,每个步骤末尾都需要RUN语句来完成该步骤的执行。

数据步

此步骤涉及将所需数据集加载到 SAS 内存中并识别数据集的变量(也称为列)。它还捕获记录(也称为观察或主题)。DATA 语句的语法如下。

句法

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;

例子

下面的示例显示了命名数据集、定义变量、创建新变量和输入数据的简单情况。这里,字符串变量末尾有一个 $,而数值则没有它。

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 内置过程来分析数据。

句法

PROC procedure_name options; #The name of the proc.
RUN;

例子

下面的示例显示使用MEANS过程打印数据集中数值变量的平均值。

PROC MEANS;
RUN;

输出步骤

数据集中的数据可以用条件输出语句显示。

句法

PROC PRINT DATA = data_set;
OPTIONS;
RUN;

例子

下面的示例显示在输出中使用 where 子句从数据集中仅生成少量记录。

PROC PRINT DATA = TEMP;
WHERE SALARY > 700;
RUN;

完整的 SAS 计划

以下是上述每个步骤的完整代码。

ps_完整代码

程序输出

上述代码的输出可以在“结果”选项卡中看到。

ps_程序_输出

SAS - 基本语法

与任何其他编程语言一样,SAS 语言有自己的语法规则来创建 SAS 程序。

任何 SAS 程序的三个组成部分 - 语句、变量和数据集都遵循以下语法规则。

SAS 报表

  • 语句可以在任何地方开始并在任何地方结束。最后一行末尾的分号标志着语句的结束。

  • 许多 SAS 语句可以位于同一行,每个语句都以分号结尾。

  • 空格可用于分隔 SAS 程序语句中的组件。

  • SAS 关键字不区分大小写。

  • 每个 SAS 程序都必须以 RUN 语句结束。

SAS 变量名称

SAS 中的变量表示 SAS 数据集中的一列。变量名称遵循以下规则。

  • 它的长度最多为 32 个字符。

  • 它不能包含空格。

  • 它必须以字母 A 到 Z(不区分大小写)或下划线 (_) 开头。

  • 可以包含数字,但不能作为第一个字符。

  • 变量名不区分大小写。

例子

# Valid Variable Names
REVENUE_YEAR
MaxVal
_Length

# Invalid variable Names
Miles Per Liter	#contains Space.
RainfFall%      # contains apecial character other than underscore.
90_high		# Starts with a number.

SAS 数据集

DATA 语句标志着新 SAS 数据集的创建。数据集创建规则如下。

  • DATA 语句后的一个单词表示临时数据集名称。这意味着数据集在会话结束时被删除。

  • 数据集名称可以以库名称作为前缀,这使其成为永久数据集。这意味着数据集在会话结束后仍然存在。

  • 如果省略 SAS 数据集名称,则 SAS 将创建一个临时数据集,其名称由 SAS 生成,例如 DATA1、DATA2 等。

例子

# Temporary data sets.
DATA TempData;
DATA abc;
DATA newdat;

# Permanent data sets.
DATA LIBRARY1.DATA1
DATA MYLIB.newdat;

SAS 文件扩展名

SAS程序、数据文件和程序结果以各种扩展名保存在Windows中。

  • *.sas - 它代表 SAS 代码文件,可以使用 SAS 编辑器或任何文本编辑器进行编辑。

  • *.log - 它表示 SAS 日志文件,它包含已提交的 SAS 程序的错误、警告和数据集详细信息等信息。

  • *.mht / *.html - 它代表 SAS 结果文件。

  • *.sas7bdat - 它表示 SAS 数据文件,其中包含 SAS 数据集,包括变量名称、标签和计算结果。

SAS 中的评论

SAS 代码中的注释以两种方式指定。下面是这两种格式。

*信息; 输入评论

*消息形式的评论里面不能包含分号或不匹配的引号。此外,此类注释中不应引用任何宏语句。它可以跨越多行并且可以是任意长度。以下是单行注释示例 -

* This is comment ;

以下是多行注释示例 -

* This is first line of the comment
* This is second line of the comment;

/*消息*/ 输入注释

/*message*/形式的注释使用频率较高,且不能嵌套。但它可以跨越多条线并且可以是任意长度。以下是单行注释示例 -

/* This is comment */

以下是多行注释示例 -

/* This is first line of the comment
* This is second line of the comment */

SAS - 数据集

可供 SAS 程序分析的数据称为 SAS 数据集。它是使用 DATA 步骤创建的。SAS 可以读取各种文件作为其数据源,例如CSV、Excel、Access、SPSS 以及原始数据。它还具有许多可供使用的内置数据源。

  • 如果数据集被 SAS 程序使用,然后在会话运行后被丢弃,则称为临时数据集。

  • 但如果它被永久存储以供将来使用,则称为永久数据集。所有永久数据集都存储在特定的库下。

SAS 数据集以行和列的形式存储,也称为 SAS 数据表。下面我们看到永久数据集的示例,这些数据集是内置的以及来自外部源的红色。

SAS 内置数据集

这些数据集已在安装的 SAS 软件中可用。可以探索和使用它们来制定数据分析的样本表达式。要探索这些数据集,请转至Libraries -> My Libraries -> SASHELP。展开它后,我们会看到所有可用内置数据集的名称列表。

data_sets_1_explore

让我们向下滚动找到名为CARS的数据集。双击该数据集将在右侧窗格中打开它,我们可以在其中进一步探索它。我们还可以使用右侧窗格下的最大化视图按钮来最小化左侧窗格。

数据集_2_CARS

我们可以使用底部的滚动条向右滚动以浏览表中的所有列及其值。

data_sets_3_CARS_explore

导入外部数据集

我们可以使用 SAS Studio 中提供的导入功能将自己的文件导出为数据集。但这些文件必须在 SAS 服务器文件夹中可用。因此,我们必须使用“服务器文件和文件夹”下的上传选项将源数据文件上传到 SAS 文件夹。

data_sets_4_1_loacl_files_to_server

接下来,我们通过导入在 SAS 程序中使用上述文件。为此,我们使用选项“任务”->“实用程序”->“导入数据”,如下所示。双击“导入数据”按钮,将在右侧打开窗口,为数据集选择文件。

接下来单击右窗格中导入数据程序下的选择文件按钮。以下是可以导入的文件类型的列表。

data_sets_5_import_files

我们选择存储在本地系统中的“employee.txt”文件并导入该文件,如下所示。

data_sets_4_2_import_utility

查看导入的数据

我们可以通过运行使用“运行”选项生成的默认导入代码来查看导入的数据

data_sets_6_view_imported_data

我们可以使用与上述相同的方法导入任何其他文件类型,并在各种 SAS 程序中使用它。

SAS - 变量

一般来说,SAS 中的变量表示它正在分析的数据表的列名称。但它也可以用于其他目的,例如将其用作编程循环中的计数器。在本章中,我们将看到如何使用 SAS 变量作为 SAS 数据集的列名。

SAS 变量类型

SAS 有以下三种类型的变量 -

数值变量

这是默认的变量类型。这些变量用于数学表达式。

句法

INPUT VAR1 VAR2 VAR3; 		#Define numeric variables in the data set.

在上面的语法中,INPUT 语句显示了数值变量的声明。

例子

INPUT ID SALARY COMM_PERCENT;

字符变量

字符变量用于数学表达式中未使用的值。它们被视为文本或字符串。通过在变量名末尾添加带空格的 $ 符号,变量就成为字符变量。

句法

INPUT VAR1 $ VAR2 $ VAR3 $; 	#Define character variables in the data set.

在上面的语法中,INPUT语句显示了字符变量的声明。

例子

INPUT FNAME $ LNAME $ ADDRESS $;

日期变量

这些变量仅被视为日期,并且它们需要采用有效的日期格式。通过在变量名称末尾添加带有空格的日期格式,变量就成为日期变量。

句法

INPUT VAR1 DATE11. VAR2 MMDDYY10. ; #Define date variables in the data set.

在上面的语法中,INPUT 语句显示了日期变量的声明。

例子

INPUT DOB DATE11. START_DATE MMDDYY10. ;

SAS程序中变量的使用

上述变量在 SAS 程序中的使用如下例所示。

例子

下面的代码显示了如何在 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;

在上面的示例中,所有字符变量都声明后跟 $ 符号,日期变量声明后跟日期格式。上述程序的输出如下。

SAS_BS_变量_输出

使用变量

这些变量对于分析数据非常有用。它们用于应用统计分析的表达式中。让我们看一个分析名为CARS的内置数据集的示例,该数据集位于Libraries → My Libraries → SASHELP下。双击它可以探索变量及其数据类型。

变量_1_探索_汽车

接下来,我们可以使用 SAS studio 中的任务选项生成其中一些变量的汇总统计数据。转到任务 -> 统计 -> 摘要统计并双击它打开如下所示的窗口。选择数据集SASHELP.CARS并选择分析变量下的三个变量 - MPG_CITY、MPG_Highway 和 Weight。按住 Ctrl 键的同时通过单击选择变量。单击运行。

变量_2_选择_摘要_汽车

完成上述步骤后,单击结果选项卡。它显示了所选三个变量的统计摘要。最后一列表示分析中使用的观察(记录)数量。

变量_3_summary_result_car

SAS - 字符串

SAS 中的字符串是用一对单引号括起来的值。此外,字符串变量是通过在变量声明末尾添加空格和 $ 符号来声明的。SAS 具有许多强大的函数来分析和操作字符串。

声明字符串变量

我们可以声明字符串变量及其值,如下所示。在下面的代码中,我们声明了两个长度为 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;

运行上面的代码时,我们得到显示变量名称及其值的输出。

strings_1_concatenate

字符串函数

以下是一些经常使用的 SAS 函数的示例。

子集

该函数使用开始和结束位置提取子字符串。如果没有提到结束位置,它将提取直到字符串末尾的所有字符。

句法

SUBSTRN('stringval',p1,p2)

以下是所使用参数的描述 -

  • stringval是字符串变量的值。
  • p1是提取的起始位置。
  • p2是提取的最终位置。

例子

data string_examples;
   LENGTH string1 $ 6 ;
   String1 = 'Hello';
   sub_string1 = substrn(String1,2,4) ;
   /*Extract from position 2 to 4 */
   sub_string2 = substrn(String1,3) ;
   /*Extract from position 3 onwards */
run;
proc print data = string_examples noobs;
run;

运行上面的代码后,我们得到的输出显示了 substrn 函数的结果。

strings_2_substr

TRIMN

此函数删除字符串中的尾随空格。

句法

TRIMN('stringval')

以下是所使用参数的描述 -

  • stringval是字符串变量的值。
data string_examples;
   LENGTH string1 $ 7  ;
   String1='Hello  ';
   length_string1 = lengthc(String1);
   length_trimmed_string = lengthc(TRIMN(String1));
run;
proc print data = string_examples noobs;
run;

运行上面的代码后,我们得到的输出显示了 TRIMN 函数的结果。

strings_3_trimn

SAS - 阵列

SAS 中的数组用于使用索引值存储和检索一系列值。该索引表示保留内存区域中的位置。

句法

在 SAS 中,使用以下语法声明数组 -

ARRAY ARRAY-NAME(SUBSCRIPT) ($) VARIABLE-LIST ARRAY-VALUES

在上面的语法中 -

  • ARRAY是用于声明数组的 SAS 关键字。

  • ARRAY-NAME是数组的名称,遵循与变量名称相同的规则。

  • SUBSCRIPT是数组要存储的值的数量。

  • ($)是一个可选参数,仅当数组要存储字符值时才使用。

  • VARIABLE-LIST是可选的变量列表,它们是数组值的占位符。

  • ARRAY-VALUES是存储在数组中的实际值。它们可以在这里声明,也可以从文件或数据行读取。

数组声明示例

可以使用上述语法以多种方式声明数组。以下是示例。

# 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;

访问数组值

可以使用如下所示的打印过程来访问存储在数组中的值。使用上述方法之一声明后,使用 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;

当我们执行上面的代码时,它会产生以下结果 -

array_character_2_result

使用 OF 运算符

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;

当我们执行上面的代码时,它会产生以下结果 -

结果数组

使用 IN 运算符

数组中的值也可以使用 IN 运算符来访问,该运算符检查数组的行中是否存在值。在下面的示例中,我们检查数据中颜色“黄色”的可用性。该值区分大小写。

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 - 数字格式

SAS 可以处理多种数值数据格式。它在变量名称末尾使用这些格式将特定的数字格式应用于数据。SAS 使用两种数字格式。一种用于读取特定格式的数值数据,称为信息,另一种用于以特定格式显示数值数据,称为输出格式

句法

数字信息的语法是 -

Varname Formatnamew.d

以下是所使用参数的描述 -

  • Varname是变量的名称。

  • Formatname是应用于变量的数字格式的名称。

  • w是变量允许存储的最大数据列数(包括小数点后的数字和小数点本身)。

  • d是小数点右边的位数。

读取数字格式

以下是用于将数据读入 SAS 的格式列表。

输入数字格式

格式 使用
名词

最大“n”列数,不带小数点。

NP

带有“p”个小数点的最大“n”列数。

COMMAN.p

最大“n”列数,带有“p”个小数位,可删除任何逗号或美元符号。

COMMAN.p

最大“n”列数,带有“p”个小数位,可删除任何逗号或美元符号。

显示数字格式

与读取数据时应用格式类似,下面是用于在 SAS 程序输出中显示数据的格式列表。

输出数字格式

格式 使用
名词

写入最大“n”位数,不带小数点。

NP

写入带有“p”个小数点的最大“np”列数。

美元n.p

写入最大“n”列数,其中包含 p 个小数位、前导美元符号和千位逗号。

请注意 -

  • 如果小数点后的位数小于格式说明符,则将在末尾附加零。

  • 如果小数点后的位数大于格式说明符,则最后一位数字将被四舍五入

例子

下面的示例说明了上述场景。

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 - 运营商

SAS 中的运算符是在数学、逻辑或比较表达式中使用的符号。这些符号内置于 SAS 语言中,并且可以将许多运算符组合在单个表达式中以给出最终输出。

以下是 SAS 运营商类别的列表。

  • 算术运算符
  • 逻辑运算符
  • 比较运算符
  • 最小/最大运算符
  • 串联运算符

我们将一一研究。这些运算符始终与属于 SAS 程序分析的数据一部分的变量一起使用。

算术运算符

下表描述了算术运算符的详细信息。我们假设两个数据变量V1V2分别具有值84

操作员 描述 例子
+ 添加 V1+V2=12
- 减法 V1-V2=4
* 乘法 V1*V2=32
/ 分配 V1/V2=2
** 求幂 V1**V2=4096

例子

DATA MYDATA1;
input @1 COL1 4.2	@7 COL2 3.1; 
Add_result = COL1+COL2;
Sub_result = COL1-COL2;
Mult_result = COL1*COL2;
Div_result = COL1/COL2;
Expo_result = COL1**COL2;
datalines;
11.21 5.3
3.11  11
;
PROC PRINT DATA = MYDATA1;
RUN;

运行上面的代码,我们得到以下输出。

算术运算符

逻辑运算符

下表描述了逻辑运算符的详细信息。这些运算符评估表达式的真值。因此逻辑运算符的结果始终是 1 或 0。我们假设两个数据变量V1V2分别具有值84

操作员 描述 例子
& AND 运算符。如果两个数据值的计算结果均为 true,则结果为 1,否则为 0。 (V1>2 & V2 > 3) 给出 0。
| 或运算符。如果任一数据值评估为 true,则结果为 1,否则为 0。 (V1>9 & V2>3) 为 1。
NOT 运算符。NOT 运算符的结果以表达式的形式表示,其值为 FALSE 或缺失值为 1,否则为 0。 NOT(V1 > 3) 为 1。

例子

DATA MYDATA1;
input @1 COL1 5.2	@7 COL2 4.1; 
and_=(COL1 > 10 & COL2 > 5 );
or_ = (COL1 > 12 | COL2 > 15 );
not_ = ~( COL2 > 7 );
datalines;
11.21 5.3
3.11  11.4
;
PROC PRINT DATA = MYDATA1;
RUN;

运行上面的代码,我们得到以下输出。

逻辑运算符

比较运算符

下表描述了比较运算符的详细信息。这些运算符比较变量的值,结果是真值,1 表示 TRUE,0 表示 False。我们假设两个数据变量V1V2分别具有值84

操作员 描述 例子
= 等于运算符。如果两个数据值相等,则结果为 1,否则为 0。 (V1 = 8) 给出 1。
^= 不等于运算符。如果两个数据值不相等,则结果为 1,否则为 0。 (V1 ^= V2) 给出 1。
< 小于运算符。 (V2 < V2) 给出 1。
<= 小于或等于运算符。 (V2 <= 4) 给出 1。
> 大于运算符。 (V2 > V1) 给出 1。
>= 大于或等于运算符。 (V2 >= V1) 给出 0。
IN 运算符。如果变量的值等于给定值列表中的任何一个值,则返回 1,否则返回 0。 (5,7,9,8) 中的 V1 给出 1。

例子

DATA MYDATA1;
input @1 COL1 5.2	@7 COL2 4.1; 
EQ_ = (COL1 = 11.21);
NEQ_= (COL1 ^= 11.21);
GT_ = (COL2 => 8);
LT_ = (COL2 <= 12);
IN_ = COL2 in( 6.2,5.3,12 );
datalines;
11.21 5.3
3.11  11.4
;
PROC PRINT DATA = MYDATA1;
RUN;

运行上面的代码,我们得到以下输出。

运算符_比较

最小/最大运算符

下表描述了最小值/最大值运算符的详细信息。这些运算符比较一行中的变量值,并返回行中值列表中的最小值或最大值。

操作员 描述 例子
最小 MIN 运算符。它返回行中值列表的最小值。 MIN(45.2,11.6,15.41) 给出 11.6
最大限度 最大运算符。它返回行中值列表的最大值。 MAX(45.2,11.6,15.41) 给出 45.2

例子

DATA MYDATA1;
input @1 COL1 5.2	@7 COL2 4.1 @12 COL3 6.3; 
min_ = MIN(COL1 , COL2 , COL3);
max_ = MAX( COL1, COl2 , COL3);
datalines;
11.21 5.3 29.012
3.11  11.4 18.512
;
PROC PRINT DATA = MYDATA1;
RUN;

运行上面的代码,我们得到以下输出。

运算符_最小最大

串联运算符

下表描述了串联运算符的详细信息。该运算符连接两个或多个字符串值。返回单个字符值。

操作员 描述 例子
|| 连接运算符。它返回两个或多个值的串联。 '你好'||' World' 给出 Hello World

例子

DATA MYDATA1;
input  COL1 $	COL2 $  COL3 $; 
concat_ = (COL1 || COL2 || COL3);
datalines;
Tutorial s point
simple easy learning
;
PROC PRINT DATA = MYDATA1;
RUN;

运行上面的代码,我们得到以下输出。

运算符连接

运算符优先级

运算符优先级指示复杂表达式中存在的多个运算符的求值顺序。下表描述了一组运算符的优先顺序。

团体 命令 符号
第一组 右到左 ** + - 不是最小值 最大值
第二组 左到右 * /
第三组 左到右 + -
第四组 左到右 ||
第五组 左到右 <<==>=>

SAS - 循环

您可能会遇到这样的情况:一段代码需要执行多次。一般来说,语句是按顺序执行的 - 首先执行函数中的第一个语句,然后执行第二个语句,依此类推。但是当你想要一次又一次地执行同一组语句时,我们就需要循环的帮助。

在 SAS 中,循环是通过使用 DO 语句完成的。它也称为DO 循环。下面给出的是 SAS 中 DO 循环语句的一般形式。

流程图

SAS_do_while_loop.jpg

以下是 SAS 中 DO 循环的类型。

先生。 循环类型和描述
1 溶解氧指数。

循环从索引变量的起始值一直持续到停止值。

2 做一会儿。

循环继续,直到 while 条件变为 false。

3 直到。

循环继续直到 UNTIL 条件变为 True。

SAS - 决策

决策结构要求程序员指定程序要评估或测试的一个或多个条件,以及在条件确定为 true 时要执行的一条或多条语句,以及可选的在条件确定时要执行的其他语句确定是假的

以下是大多数编程语言中典型决策结构的一般形式 -

决策

SAS 提供以下类型的决策语句。单击以下链接查看其详细信息。

先生。 声明类型和描述
1 IF 语句。

if语句由一个条件组成。如果条件为真,则获取特定数据。

2 IF-THEN-ELSE 语句。

if语句后跟 else 语句,当布尔条件为 false 时执行。

3 IF-THEN-ELSE-IF 语句。

if语句后跟 else 语句,else 语句后又跟另一对 IF-THEN 语句。

4 IF-THEN-DELETE 语句。

if 语句由一个条件组成,当该条件为 true 时,将从观察中删除特定数据。

SAS - 函数

SAS 具有多种内置函数,有助于分析和处理数据。这些函数用作 DATA 语句的一部分。它们将数据变量作为参数并返回存储到另一个变量中的结果。根据函数的类型,它所采用的参数数量可能会有所不同。有些函数接受零个参数,而另一些函数则接受固定数量的变量。以下是 SAS 提供的函数类型列表。

句法

在 SAS 中使用函数的一般语法如下。

FUNCTIONNAME(argument1, argument2...argumentn)

这里的参数可以是常量、变量、表达式或另一个函数。

功能类别

根据用途,SAS 中的函数分类如下。

  • 数学
  • 日期和时间
  • 特点
  • 截断
  • 各种各样的

数学函数

这些函数用于对变量值应用一些数学计算。

例子

下面的 SAS 程序显示了一些重要数学函数的使用。

数据数学函数;

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;

运行上述代码时,我们得到以下输出 -

数学函数结果

日期和时间函数

这些是用于处理日期和时间值的函数。

例子

下面的 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;

运行上述代码时,我们得到以下输出 -

日期时间函数结果

字符功能

这些是用于处理字符或文本值的函数。

例子

下面的 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;

运行上述代码时,我们得到以下输出 -

char_funcs_结果

截断函数

这些是用于截断数值的函数。

例子

下面的 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;

运行上述代码时,我们得到以下输出 -

trunc_funcs_结果

杂项功能

现在让我们通过一些例子来了解 SAS 的各种功能。

例子

下面的 SAS 程序显示了杂项函数的使用。

data misc_functions;

/* Nearest greatest integer */
state2=zipstate('01040');
 
/* Amortization calculation */
payment = mort(50000, . , .10/12,30*12);

proc print data = misc_functions noobs;
run;

运行上述代码时,我们得到以下输出 -

Misc_funcs_结果

SAS - 输入方法

输入方法用于读取原始数据。原始数据可能来自外部源或来自流数据线。输入语句使用您分配给每个字段的名称创建一个变量。所以你必须在输入语句中创建一个变量。相同的变量将显示在 SAS 数据集的输出中。以下是 SAS 中可用的不同输入方法。

  • 列表输入法
  • 命名输入法
  • 列输入法
  • 格式化输入法

各输入法的详细说明如下。

列表输入法

在此方法中,变量与数据类型一起列出。仔细分析原始数据,以便声明的变量的顺序与数据匹配。任何一对相邻列之间的分隔符(通常是空格)应该是统一的。任何丢失的数据都会导致输出出现问题,因为结果将是错误的。

例子

以下代码和输出显示了列表输入法的使用。

DATA TEMP;
INPUT   EMPID ENAME $ DEPT $ ;
DATALINES;
1 Rick  IT
2 Dan  OPS
3 Tusar  IT
4 Pranab  OPS
5 Rasmi  FIN
;
PROC PRINT DATA = TEMP;
RUN;

运行上述代码后,我们得到以下输出。

列表_n_命名_输入

命名输入法

在此方法中,变量与数据类型一起列出。原始数据被修改为在匹配数据前面声明变量名称。任何一对相邻列之间的分隔符(通常是空格)应该是统一的。

例子

以下代码和输出显示了命名输入法的使用。

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;

运行上述代码后,我们得到以下输出。

列表_n_命名_输入

列输入法

在此方法中,变量与数据类型和列宽度一起列出,指定单列数据的值。例如,如果员工姓名最多包含 9 个字符,并且每个员工姓名从第 10 列开始,则员工姓名变量的列宽将为 10-19。

例子

下面的代码展示了列输入法的使用。

DATA TEMP;
INPUT   EMPID 1-3 ENAME $ 4-12 DEPT $ 13-16;
DATALINES;
14 Rick     IT 
241Dan      OPS 
30 Sanvi    IT 
410Chanchal OPS 
52 Piyu     FIN 
;
PROC PRINT DATA = TEMP;
RUN;

当我们执行上面的代码时,它会产生以下结果 -

列_n_格式化_输入

格式化输入法

在此方法中,从固定的起点读取变量,直到遇到空格为止。由于每个变量都有固定的起点,因此任何一对变量之间的列数将成为第一个变量的宽度。字符“@n”用于指定变量的起始列位置为第 n 列。

例子

下面的代码展示了格式化输入法的使用

DATA TEMP;
INPUT   @1 EMPID $ @4 ENAME $ @13 DEPT $ ;
DATALINES;
14 Rick     IT 
241 Dan      OPS 
30 Sanvi    IT 
410 Chanchal OPS 
52 Piyu     FIN 
;
PROC PRINT DATA = TEMP;
RUN;

当我们执行上面的代码时,它会产生以下结果 -

列_n_格式化_输入

SAS - 宏

SAS 有一个强大的编程功能,称为,它使我们能够避免重复的代码部分,并在需要时一次又一次地使用它们。它还有助于在代码中创建动态变量,这些变量可以为同一代码的不同运行实例采用不同的值。还可以为代码块声明宏,这些代码块将以与宏变量类似的方式重复使用多次。我们将在下面的示例中看到这两个内容。

宏观变量

这些变量保存着 SAS 程序一次又一次使用的值。它们在 SAS 程序的开头声明,并在程序正文中稍后调用。它们的范围可以是全局的或局部的。

全局宏变量

它们被称为全局宏变量,因为它们可以被 SAS 环境中可用的任何 SAS 程序访问。一般来说,它们是系统分配的变量,可供多个程序访问。一个常见的例子是系统日期。

例子

下面是一个名为 SYSDATE 的 SAS 变量示例,它表示系统日期。考虑这样一个场景:每天生成报告时在 SAS 报告的标题中打印系统日期。标题将显示当前日期和日期,而无需我们为它们编码任何值。我们使用 SASHELP 库中提供的名为 CARS 的内置 SAS 数据集。

proc print data = sashelp.cars;
where make = 'Audi' and type = 'Sports' ;
 TITLE "Sales as of &SYSDAY &SYSDATE";
run;

当上面的代码运行时,我们得到以下输出。

全局宏结果

局部宏变量

这些变量可以通过 SAS 程序访问,其中它们被声明为程序的一部分。它们通常用于向相同的 SAS 语句 sl 提供不同的变量,以便它们可以处理数据集的不同观察结果。

句法

局部变量使用以下语法进行标记。

% LET (Macro Variable Name) = Value;

这里的值字段可以根据程序的需要采用任何数字、文本或日期值。宏变量名称是任何有效的 SAS 变量。

例子

SAS 语句通过在变量名称开头附加&字符来使用变量。下面的程序让我们了解了品牌“Audi”和类型“Sports”的所有观察结果。如果我们想要不同 make的结果,我们需要更改变量make_name的值,而不更改程序的任何其他部分。如果是 Bring 程序,则可以在任何 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;

当上面的代码运行时,我们得到与前面的程序相同的输出。但是,让我们将类型名称更改为“Wagon”并运行相同的程序。我们会得到下面的结果。

本地宏结果

宏程序

宏是一组由名称引用的 SAS 语句,并可以使用该名称在程序中的任何位置使用它。它以 %MACRO 语句开始,以 %MEND 语句结束。

句法

局部变量使用以下语法声明。

# Creating a Macro program.
%MACRO <macro name>(Param1, Param2,….Paramn);

Macro Statements;

%MEND;

# Calling a Macro program.
%MacroName (Value1, Value2,…..Valuen);

例子

下面的程序在名为“show_result”的宏下声明了一组 SAT staemnet 该宏正在被其他 SAS 语句调用。

%MACRO show_result(make_ , typ