- SAS 教程
- SAS - 首页
- SAS - 概述
- SAS - 环境
- SAS - 用户界面
- SAS - 程序结构
- SAS - 基本语法
- SAS - 数据集
- SAS - 变量
- SAS - 字符串
- SAS - 数组
- SAS - 数值格式
- SAS - 运算符
- SAS - 循环
- SAS - 决策
- SAS - 函数
- SAS - 输入方法
- SAS - 宏
- SAS - 日期和时间
- SAS 数据集操作
- SAS - 读取原始数据
- SAS - 写入数据集
- SAS - 合并数据集
- SAS - 合并数据集
- SAS - 子集数据集
- SAS - 排序数据集
- SAS - 格式化数据集
- SAS - SQL
- SAS - 输出交付系统
- SAS - 模拟
- SAS 基本统计过程
- SAS - 算术平均值
- SAS - 标准差
- SAS - 频数分布
- SAS - 交叉表
- SAS - t 检验
- SAS - 相关分析
- SAS - 线性回归
- SAS - Bland-Altman 分析
- SAS - 卡方检验
- SAS - Fisher 精确检验
- SAS - 重复测量分析
- SAS - 单因素方差分析
- SAS - 假设检验
- SAS 有用资源
- SAS - 快速指南
- SAS - 有用资源
- SAS - 问答
- SAS - 讨论
SAS - SQL
SAS 通过在 SAS 程序中使用 SQL 查询,为大多数流行的关系数据库提供了广泛的支持。大多数 **ANSI SQL** 语法都受支持。过程 **PROC SQL** 用于处理 SQL 语句。此过程不仅可以返回 SQL 查询的结果,还可以创建 SAS 表和变量。下面将描述所有这些场景的示例。
语法
在 SAS 中使用 PROC SQL 的基本语法如下:
PROC SQL; SELECT Columns FROM TABLE WHERE Columns GROUP BY Columns ; QUIT;
以下是所用参数的描述:
SQL 查询写在 PROC SQL 语句之后,然后是 QUIT 语句。
下面我们将看到如何使用此 SAS 过程进行 SQL 中的 **CRUD**(创建、读取、更新和删除)操作。
SQL 创建操作
使用 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 读取操作
SQL 中的读取操作包括编写 SQL SELECT 查询以从表中读取数据。下面的程序查询 SASHELP 库中名为 CARS 的 SAS 数据集。该查询获取数据集的一些列。
PROC SQL; SELECT make,model,type,invoice,horsepower FROM SASHELP.CARS ; QUIT;
执行上述代码后,我们将得到以下结果:
带有 WHERE 子句的 SQL SELECT
下面的程序使用 **where** 子句查询 CARS 数据集。在结果中,我们只得到制造商为“奥迪”且类型为“跑车”的观测值。
PROC SQL; SELECT make,model,type,invoice,horsepower FROM SASHELP.CARS Where make = 'Audi' and Type = 'Sports' ; QUIT;
执行上述代码后,我们将得到以下结果:
SQL 更新操作
我们可以使用 SQL Update 语句更新 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;
执行上述代码后,我们将得到以下结果:
SQL 删除操作
SQL 中的删除操作包括使用 SQL DELETE 语句从表中删除某些值。我们继续使用上述示例中的数据,并删除员工工资大于 900 的表中的行。
PROC SQL; DELETE FROM EMPLOYEES2 WHERE SALARY > 900; QUIT; PROC PRINT data = EMPLOYEES2; RUN;
执行上述代码后,我们将得到以下结果: