2017-11-13 14 views
0
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; 

私は、複数のparamcdでこれらの値の2つのパラメータと平均値をフィルタリングする必要がある単一のデータセットをSASに用意しています。私は問題を解決するためには、SQL構文を作成する必要があります。2つのwhere文と1つのデータセットでマージするPROC SQL

+0

質問はちょっと見えません。マージのようですが、データセットは** B1 **です。 – pinegulf

+0

私はそれが解決されるSQLマージ問題によって何を意味するのかは明らかではないと思います。これを解決しようとするSQLコードの例を含めると、どこに問題があると思うかを説明できるかどうかがわかります。 – Joe

答えて

1

あなたは自分自身とテーブルに加わりたいと思うように見えます。このようなことを試してみてください。

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; 

または、サブクエリを使用してwhere = datasetオプションをレプリケートできます。

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 
; 
+0

これは機能しますが、なぜ誰かが同じテーブルに参加する必要があるのか​​を明確にすることはできますか?私はその理由を見落とす。たぶん私はただの何かを明らかにしていないでしょう。どうなり得るか? – pinegulf

+0

@pinegulf理由は、ソーステーブルが名前と値のペアテーブルです。したがって、2つの値の平均を見つけるために2つの行を一致させる必要があります。 – Tom

関連する問題