Join proc sql内部联接行为和必需的select语句
我最近开始使用SAS,只接受了不涉及proc sql的基本培训。当我有时间的时候,我想多读一些关于SAS sql的内容。 现在,我找到了一个解决我想做的事情的方法,但是我很难理解发生了什么 当我想找出数据集中的哪些主题对其所有记录都具有特定值时,我的问题就开始了。我利用了我以前编写的代码片段,我认为我已经理解了。我刚刚尝试添加了几个变量和group by语句:Join proc sql内部联接行为和必需的select语句,join,sas,proc-sql,Join,Sas,Proc Sql,我最近开始使用SAS,只接受了不涉及proc sql的基本培训。当我有时间的时候,我想多读一些关于SAS sql的内容。 现在,我找到了一个解决我想做的事情的方法,但是我很难理解发生了什么 当我想找出数据集中的哪些主题对其所有记录都具有特定值时,我的问题就开始了。我利用了我以前编写的代码片段,我认为我已经理解了。我刚刚尝试添加了几个变量和group by语句: data have; input subject:$1. myvar:1. mycount:1.; datalines;
data have;
input subject:$1. myvar:1. mycount:1.;
datalines;
a 1 1
a 0 2
a 0 3
b 1 1
b 0 2
b 1 3
c 1 1
c 1 2 /*This subject has myvar = 1 for all its observations*/
;
run;
*find subjects;
proc sql;
create table want as
/* select*/
/* distinct x.subject */
/* from */
(select distinct subject, count(myvar) as myvar_c
from have where myvar = 1 group by subject) x,
(select distinct subject, max(mycount) as max_c
from have group by subject) y
where x.subject = y.subject and x.myvar_c = y.max_c;
quit;
当删除create table语句中注释的“select distinct x.SUMBER from”时,上述代码正常工作
但是,我之前还创建了另一段代码,用于选择数据集中具有两种记录类型的所有主题:
data have2;
input subject:$1. mytype:1.;
datalines;
a 1
a 0
a 0
b 1
b 0
b 1
c 1
c 1 /*This subject doesn't have two types of records in all its observations*/
;
run;
*Find subjects;
proc sql;
create table want2 as select
distinct x.subject from
have2 x,
(select distinct subject, count(distinct mytype) as mytype_c from have2 group by subject) y
where y.mytype_c = 2 and x.subject = y.subject;
quit;
类似,但不需要额外的select语句。第一个代码有3个select语句,第二个代码只需要两个select语句。
有人能告诉我为什么需要这样做吗?
或者给我链接一些很好的文档,其中列出了这些类型的连接的规范-有人能告诉我这种类型的连接的具体名称吗,在这里您只使用逗号
在我写作的过程中,还可以看到,我可以使用我最初编写的代码来查找只有1种记录类型的主题,并针对我当前的问题对其进行调整><,但仍然想知道第一个示例中发生了什么。SQL连接构造
FROM ONE, TWO, THREE, …
称为交叉联接,是无条件联接。逗号(,)语法现在不太流行,建议使用以下结构
FROM ONE
CROSS JOIN TWO
CROSS JOIN THREE
结果集是笛卡尔积,行数是交叉联接表中行数的乘积
当查询具有条件(WHERE子句)时,联接是一个内部联接
Proc SQL
的SAS文档是一个很好的起点,其中包括一些示例
将表与自身或其他表或视图联接。
…
目录
语法
必需参数
可选参数
详细信息
联接类型
连接表
表格限制
指定要返回的行
表别名
将表与表本身连接起来
内部联接
外部联接
交叉连接
工会加入
自然连接
连接两个以上的表
联接和子查询的比较 一般提示: 如果您想在浏览器中玩弄(摆弄)SQL查询,请尝试访问 网站