Join proc sql内部联接行为和必需的select语句

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;

我最近开始使用SAS,只接受了不涉及proc sql的基本培训。当我有时间的时候,我想多读一些关于SAS sql的内容。 现在,我找到了一个解决我想做的事情的方法,但是我很难理解发生了什么

当我想找出数据集中的哪些主题对其所有记录都具有特定值时,我的问题就开始了。我利用了我以前编写的代码片段,我认为我已经理解了。我刚刚尝试添加了几个变量和group by语句:

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查询,请尝试访问 网站