Sas 在单个数据集中使用带有两个where语句和merge的PROC SQL
我在SAS中有一个数据集,其中有几个参数我需要过滤两个参数和这些值的平均值。我需要创建一个proc-sql语法来解决合并问题。看起来您只是想将一个表本身连接起来。试试这样的Sas 在单个数据集中使用带有两个where语句和merge的PROC SQL,sas,Sas,我在SAS中有一个数据集,其中有几个参数我需要过滤两个参数和这些值的平均值。我需要创建一个proc-sql语法来解决合并问题。看起来您只是想将一个表本身连接起来。试试这样的 data a; set b1(where=(PARAMCD='ABC') rename=(aval=abc) in=a) b1(where=(PARAMCD='CDE') rename=(aval=cde)); by usubjid AVISITN; if a; PARAMCD="ASD"; AVAL=mean(abc,
data a;
set b1(where=(PARAMCD='ABC') rename=(aval=abc) in=a) b1(where=(PARAMCD='CDE') rename=(aval=cde));
by usubjid AVISITN;
if a;
PARAMCD="ASD";
AVAL=mean(abc,cde);
run;
或者可以使用子查询来复制where=dataset选项
proc sql ;
create table a as
select a.usubjid
, a.avisitn
, a.aval as abc
, b.aval as cde
, mean(a.aval,b.aval) as aval
from b1 a
left join b1 b
on a.usubjid = b.usubjid
and a.avisitn = b.avisitn
and a.paramcd='ABC'
and b.paramcd='CDE'
;
quit;
这个问题似乎有点离题。。看起来像是合并,但数据集都是B1。我不认为你所说的要解决的SQL合并问题是什么意思。提供一个SQL代码示例,您可以尝试用它来解决这个问题,看看是否可以解释您认为有问题的地方。好的。这是可行的,但是有人能澄清一下为什么一个人想要左键连接一个表和同一个表吗?我看不出原因。也许我只是错过了一些明显的东西。可能是什么?原因是源表是名称/值对表。因此,需要匹配两行以找到两个值的平均值。
create table a as
select a.usubjid
, a.avisitn
, a.aval as abc
, b.aval as cde
, mean(a.aval,b.aval) as aval
from (select * from b1 where paramcd='ABC') a
left join (select * from b1 where paramcd='CDE') b
on a.usubjid = b.usubjid
and a.avisitn = b.avisitn
;