2016-05-25 102 views
0

2つのデータセットを比較し、一致する観測値を新しいデータセットに抽出します。たとえば、2つのデータセットの一致を見つけてSASの値を抽出する方法

次のように、10月と11月の2つのデータセットがあります。

データセット10月

visitor_id ctn visits kjsjakd83 3243244234 1 sakdsadda 5432223442 2 jhk43242l 3243243244 1 iiiewdaja 9839422022 2

データセット11月

visitor_id ctn visits kjsjakd83 3243244234 1 432hj4hj 3243243244 2 jhk43242l 3243243244 1 xfd3x424 2342344234 2

、私はCTNすることにより、これらのデータセットを比較した10月のデータセットからすべての観測値を抽出したいです一致するCTNが11月のデータセットにあります。したがって、抽出されたデータセットは次のようにする必要があります。

データセットマッチ

visitor_id ctn visits kjsjakd83 3243244234 1 jhk43242l 3243243244 1

私はSASでこれをどのように行うことができますか?

+0

あなたがしようとしているどのようなコード投稿してくださいこれまでのところ、これは単純な内部結合のように聞こえますそれに直面する。また、最後のデータセット(Match)が参照する3番目のデータセットであるか、必要な出力データセットであるかはわかりません。最後に、11月のデータに同じctnの訪問者IDが2つあるのはなぜですか?どちらが関連性があるのですか? – Longfish

+0

'proc sql; create table final as Distinct a.CTN、a.visitsを選択します。 を11月から内部結合します。Oct b on b.CTN = a.CTN; quit; ' –

+0

上記のコードでは、両方のデータセットの一致する行が表示されますが、11月のデータセットの一致する行のみが必要です。 –

答えて

0

oct "a"とnov "b"を指定すると、コードは正常に機能します。またKeithが述べたように、novデータセットには重複したctn値があります。これは修正するか、処理方法を説明する必要があります。 a.visitor_id = b.visitor_idとa.ctn = b.ctnに参加することが最適かもしれません。

proc sql; 
    create table final as select distinct 
     a.* from oct as a inner join nov as b 
     on a.ctn = b.ctn; 
quit; 
+0

実際は正しいです。 OPは両方のidに参加して11月のレコードだけを返す必要があります: 'b。*'それに応じて改訂してください。 – Parfait

1

あなただけCTN値11月にある10月からレコードをしたい場合、これが最も単純なSQL構文であることと思われます。

トムの答え@
select * from OCTOBER 
    where CTN in (select CTN from NOVEMBER) 
; 
0

は、私はそれを行うだろうかあるが、ここPROC SQLせずにそれを行う方法は次のとおりです。

proc sort data=october; 
    by ctn; 
run; 

proc sort data=november; 
    by ctn; 
run; 

data match; 
    merge october (IN=oct) 
     november (IN=nov keep=ctn); 
    by ctn; 
    if oct and nov; 
run; 
関連する問題