PROC SQL(八)——视图

一、视图

1、功能

视图是一系列的查询语句,在使用时被执行,用来从其他的数据集或视图中获取想要的子集(subset)或者超集(superset)。

只包含访问数据的逻辑,而不包含数据本身。

2、优点

1、与数据集相比,更节省空间

2、减少重复的查询语句

3、想用户隐藏复杂的查询关系

4、动态获取最新数据

3、注意

1、避免在视图定义中使用ORDER BY子句,在引用视图的查询中指定ORDER BY子句更有效。

2、如果同样的data要用很多次,那么最好不要创建视图而是直接创建静态表

3、避免创建基于结构可能更改的表的视图。当视图引用的列不存在时,视图的列也就无效了

二、创建视图

CREATE VIEW语句

1、语法:

CREATE VIEW proc-sql-view AS 
    SELECT column-1<, ... column-n> 
        FROM table-1 | view-1 ... table-n | view-n> 
        <optional query clauses>;

2、注意:

1、在提交代码时,sas并不执行select语句,而是将SELECT语句部分编译并将其存储在视图文件中。

2、SAS日志中的消息确认已经定义了视图。
             NOTE: SQL view CERTADV.FAVIEW has been defined.

三、描述视图

DESCRIBE VIEW语句

1、语法:

DESCRIBE VIEW proc-sql-view-1<,...proc-sql-view-n>;

2、注意:

1、可以在SAS日志中显示视图的定义

2、如果建立的视图基于另一个视图上,那么需要在PROC SQL语句中使用FEEDBACK选项。

四、管理视图

1、省略库名:

如果DESCRIBE VIEW后面的视图指定了库名,那么from后的如果不指定库名则默认为在sasuser中。

proc sql; 
	create view sasuser.payrollv as 
		select * 
			from payrollmaster; 
quit;

2、USING语句:

  • 语法:
USING libname-clause-1<,... libname-clause-n>;
  • 注意:

    1、只能与PROC SQL视图一起使用。

    2、using 语句创建的库名,不会与SAS会话中的库名冲突,可以理解为局部语句。

    3、无论视图和基础表是否位于同一个库中,都可以使用它

    4、USING子句必须是CREATE VIEW语句中的最后一个子句

  • 举例:
    proc sql; 
    	create view certadv.payrollv as 
    		select* 
    			from airline.payrollmaster 
    			using libname airline 'SAS-library-one'; 
    quit; 	
    proc print data=certadv.payrollv; 
    run;

     

五、更新视图.

1、功能:

更新视图不会更改视图的存储指令。只更新基础表中的数据。

2、注意:

只有在指定条件下可以对视图进行INSERT、UPDATE 、DELETE操作

1、只能通过视图更新单个表,该表不能联接或链接到另一个表,也不能包含子查询;

2、不能更新派生列(表达式生成的列)

3、不能更新包含任何其他子句(如ORDER BY或HAVING子句)的视图

4、不能更新包含GROUP BY子句的视图

3、举例:

1、虽然MonthlySalary是派生列,不能使用UPDATE语句更改,但它会被更新,因为它是从Salary派生的。

2、当提交PROC SQL步骤时,SAS日志中会出现一个说明,指出有多少行被更新。
             NOTE: 2 rows were updated in CERTADV.RAISEV.

/*创建视图*/
proc sql; 
	create view certadv.raisev as 
		select empid, jobcode, salary format=dollar12., 
		          salary/12 as MonthlySalary format=dollar12. 
			from certadv.payrollmaster; 
quit; 
proc sql; 
	select * 
		from certadv.raisev 
		where jobcode in ('PT2','PT3'); 
quit;

/*更新视图*/
proc sql; 
	update certadv.raisev 
		set salary=salary * 1.20 
		where jobcode='PT3'; 
quit;

六、删除视图

DROP VIEW语句

1、语法:

DROP VIEW view-name-1 <,...view-name-n>;

2、注意:

提交该步骤后,SAS日志中会出现一条消息,确认视图已被删除。

本文地址:https://blog.csdn.net/weixin_44450031/article/details/107143199

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐