自己做网赌网站,广州技术支持 奇亿网站建设,响应式网站 图片居中,搜索引擎优化排名关键字广告文章来源于SAS HELP
PROC SQL 和ANSI SQL 的区别——图表和视图名称的作用域规则不同 例1#xff1a;匹配数据集相关名称 当PROC SQL匹配数据集相关名称时#xff0c;会依次进行3个步骤#xff1a;1、有别名#xff0c;用别名匹配#xff1b;2、1匹配失败#xff0c;在无…文章来源于SAS HELP
PROC SQL 和ANSI SQL 的区别——图表和视图名称的作用域规则不同 例1匹配数据集相关名称 当PROC SQL匹配数据集相关名称时会依次进行3个步骤1、有别名用别名匹配2、1匹配失败在无别名的数据集中用数据集名匹配3、2匹配失败用有别名的数据集名匹配。
proc sql noprint;create table test asselect dm.subjid,1 as lmg length 8from dm as dm,ae as aewhere dm.subjid ae.subjidand dm.sex Mand not exists (select *from dm as dwhere d.subjid dm.subjidand strip(d.sex) F);
quit;在not exist条件中proc sql先用别名d去匹配where筛选等号左边的条件匹配成功where筛选等号右边的条件dm.subjid属于有别名d用dm匹配属于前2个步骤都没有匹配到用第3个步骤才成功匹配也就等价于
where d.subjid d.subjid
and strip(d.sex) F继而等价于
where strip(d.sex) F注意如果PROC SQL使用ISO/ANSI SQL:相关名称匹配标准2012那么where等式右边的dm.subjid就可以用高等级select语句匹配即从not exist内部查询语句中跳出到外部select语句中进行匹配
为了与ISO/ANSI SQL匹配规则一致可以修改相应查询语句。比如在例1中确保外部作用域和内部作用域有不同的别名。
proc sql noprint;create table test asselect dm.subjid,1 as lmg length 8from dm as d1,ae as aewhere d1.subjid ae.subjidand dm.sex Mand not exists (select *from dm as d2where d2.subjid d1.subjidand strip(d2.sex) F);
quit;例2模糊引用 在相同的作用域内有两个相同的dm的引用DBMS与ANSI SQL标准完全一致因此会检测到dm.xxx模棱两可。但是对于PROC SQL来说却不会觉得模糊因为按照例1的逻辑会首先对有别的的数据集进行匹配所以这里的where条件实际上筛选到的是来自ae数据集中筛选号长度大于3的筛选号。
proc sql noprint;create table test asselect dm.subjidfrom dm,ae as dmwhere dm.length(subjid)3;
quit;拓展PROC SQL exists子查询