Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sas 在单个数据集中使用带有两个where语句和merge的PROC SQL_Sas - Fatal编程技术网

Sas 在单个数据集中使用带有两个where语句和merge的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,

我在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,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
;