SAS:PROC SQL和ANSI标准

文章来源于SAS HELP

  • PROC SQL 和ANSI SQL 的区别------图表和视图名称的作用域规则不同
    例1:匹配数据集相关名称
    当PROC SQL匹配数据集相关名称时,会依次进行3个步骤:1、有别名,用别名匹配;2、1匹配失败,在无别名的数据集中用数据集名匹配;3、2匹配失败,用有别名的数据集名匹配。
sql 复制代码
proc sql noprint;
	create table test as
	select dm.subjid,1 as lmg length = 8
	from dm as dm,
		 ae as ae
	where dm.subjid = ae.subjid
	and	  dm.sex = 'M'
	and   not exists (select *
					  from dm as d
					  where d.subjid = dm.subjid
					  and   strip(d.sex) <> 'F'
					  );
quit;

在not exist条件中,proc sql先用别名d去匹配(where筛选等号左边的条件),匹配成功;where筛选等号右边的条件dm.subjid属于有别名d,用dm匹配(属于前2个步骤都没有匹配到,用第3个步骤才成功匹配),也就等价于

sql 复制代码
where d.subjid = d.subjid
and   strip(d.sex) <> 'F'

继而等价于

sql 复制代码
where strip(d.sex) <> 'F'

注意:如果PROC SQL使用ISO/ANSI SQL:相关名称匹配标准2012,那么where等式右边的dm.subjid就可以用高等级select语句匹配,即从not exist内部查询语句中跳出到外部select语句中进行匹配

为了与ISO/ANSI SQL匹配规则一致,可以修改相应查询语句。比如在例1中确保外部作用域和内部作用域有不同的别名。

sql 复制代码
proc sql noprint;
	create table test as
	select dm.subjid,1 as lmg length = 8
	from dm as d1,
		 ae as ae
	where d1.subjid = ae.subjid
	and	  dm.sex = 'M'
	and   not exists (select *
					  from dm as d2
					  where d2.subjid = d1.subjid
					  and   strip(d2.sex) <> 'F'
					  );
quit;

例2:模糊引用

在相同的作用域内有两个相同的dm的引用,DBMS与ANSI SQL标准完全一致,因此会检测到dm.xxx模棱两可。但是对于PROC SQL来说却不会觉得模糊,因为按照例1的逻辑,会首先对有别的的数据集进行匹配,所以这里的where条件实际上筛选到的是来自ae数据集中筛选号长度大于3的筛选号。

sql 复制代码
proc sql noprint;
	create table test as
	select dm.subjid
	from   dm,ae as dm
	where dm.length(subjid)>3;	
quit;

拓展:PROC SQL exists子查询

相关推荐
Wang's Blog21 分钟前
Java 接入Redis: 五大数据类型与存储结构选型
java·服务器·redis
Wang's Blog24 分钟前
Java 接入Redis: 字符串与哈希类型操作命令
java·服务器·redis
智慧物业老杨5 小时前
物业数字化落地思考:真正的转型,是底层数据秩序的重构
java·大数据·人工智能·微服务·系统架构
星空7 小时前
金蝶苍穹build.gradle配置
java·build.gradle
两点王爷8 小时前
PostgreSQL 常用 SQL 语句与 GIS 相关函数详解
数据库·后端
两点王爷8 小时前
PostgreSQL 好用又独特的特性与空间函数
数据库
梦帮科技8 小时前
AI 音乐产品的发布工程:验证门、数据发布、回滚与生产运维纪律
数据结构·数据库·架构·node.js·音视频·动态规划·推荐算法
TDengine (老段)10 小时前
TDengine 常见问题 TOP3
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
步行cgn10 小时前
Spring 基于 XML 的自动装配:byName 详解
java·后端·spring
大帅点兵11 小时前
Apache Ant 1.9.9 完整讲解
java