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 中的读取操作涉及编写 SQL SELECT 查询以从表中读取数据。在下面的程序中,查询 SASHELP 库中可用的名为 CARS 的 SAS 数据集。该查询获取数据集的一些列。

PROC SQL;
SELECT make,model,type,invoice,horsepower
FROM 
SASHELP.CARS
;
QUIT;

当执行上面的代码时,我们得到以下结果 -

SQL1

带有 WHERE 子句的 SQL SELECT

以下程序使用where子句查询 CARS 数据集。在结果中,我们仅得到品牌为“奥迪”、类型为“运动”的观察结果。

PROC SQL;
SELECT make,model,type,invoice,horsepower
FROM 
SASHELP.CARS
Where make = 'Audi'
and Type = 'Sports'
;
QUIT;

当执行上面的代码时,我们得到以下结果 -

SQL Where 子句

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 中的删除操作涉及使用 SQL DELETE 语句从表中删除某些值。我们继续使用上面示例中的数据,并从表中删除员工工资大于 900 的行。

PROC SQL;
DELETE FROM EMPLOYEES2
   WHERE SALARY > 900;
QUIT;
   PROC PRINT data = EMPLOYEES2;
RUN;

当执行上面的代码时,我们得到以下结果 -

过程 SQL 删除