2017-01-05 8 views
0

私はSASからの頻度を取得しようとしているデータセットを持っています。本質的には、エピソードの束と、誰かがイベントを持っているかどうかです。エピソードは技術的に複数のイベントを持つことができます。各レコードには組織識別子もあります。SASはユニークで独特ですが、追加の変数も必要です

proc sql; 
    create table out as select unique 
     episode_id, sum(event) as total_event 
    from table1 
    group by episode_id; 
quit; 

proc freq data=out; 
    tables total_event; 
run; 

このコードは素晴らしいしばらく私に迅速に与える:正しく(2、1、例えばので、エピソードごとに3件のイベント)エピソードあたりのイベントの頻度を識別するコードを(下)Iを開発しましたエピソードごとのイベント数の頻度には、必要な情報、つまりorganization_idが欠けています。コードにorganization_idを追加すると、その頻度は間違っていきます。私はtable1にoutテーブルをマージして、organization_idも取得しようとしましたが、それも頻度に加算されます。どのように私は最終的には、以下の周波数で実行できるように、私は追加の変数を追加します:私はあなたの目標を誤解しない限り、私はあなたがデータ自体に追加のマージが必要だと思うし、次に取得するORGANIZATION_IDで重複排除

proc freq data=out; 
tables organization_id*total_event; 
run; 
+0

organization_idを追加するコードを表示します。理想的には、いくつかのサンプルデータを示します。 – Joe

+0

ちょっと考えましたが、 'ORGANIZATION_ID'がエピソード内のすべてのイベント(同じ意味)で同じなら、なぜ' SELECT'リストに 'episode_id、organization_id、sum(event)as total_event'を使用できないのですか? 'group by episode_id、organization_id'を' GROUP BY'節として使用しますか? – vknowles

+0

組織IDは、エピソード内のすべてのイベントで必ずしも同じではありません。この方法を試してみると、頻度が増えます – Questioner

答えて

0

をあなたが望むクロスタブ:

data table1; 
    length EPISODE_ID $3 EVENT 3 ORGANIZATION_ID $3; 
    input EPISODE_ID $ EVENT ORGANIZATION_ID $; 
    datalines; 
    A 0 123 
    A 1 123 
    A 1 456 
    B 0 123 
    B 1 456 
    C 1 456 
    C 1 789 
    C 1 789 
    C 0 789 
    D 0 123 
    D 0 123 
    D 0 123 
    D 1 123 
    D 1 123 
    ; 
run; 

** sum EVENT over distinct EPISODE_ID **; 
proc sql noprint; 
    create table out1 as 
    select a.*,b.TOTAL_EVENT 
    from 
     (select * from table1) a, 
     (select distinct EPISODE_ID, sum(EVENT) as TOTAL_EVENT from table1 group by EPISODE_ID) b 
     where a.EPISODE_ID = b.EPISODE_ID; 
quit; 

** dedupe by ORGANIZATION_ID **; 
proc sort data = out1(keep = ORGANIZATION_ID TOTAL_EVENT) out=out2 nodupkey; 
    by ORGANIZATION_ID; 
run; 

proc freq data=out2; 
    tables ORGANIZATION_ID*TOTAL_EVENT; 
run; 

そうしないと、CLASS文でEPISODE_IDORGANIZATION_IDの両方でPROC MEANSを試みることができます。その後、異なるレベルの_TYPE_を見て、そのうちの1つで周波数を実行できるかどうかを確認してください。

proc means data = table1 noprint; 
    class EPISODE_ID ORGANIZATION_ID; 
    var EVENT; 
    output out = means sum=TOTAL_EVENT; 
run; 
+0

私は今proc手段を試してみましたが、それは良いアイデアでしたが、それでも正しいわけではありません - _FREQ_は頻度が高くなっています(したがって間違っています) - これはかなり近いもののtotal_eventそう)。たぶん私はこれについてもう少し考えてみます – Questioner

+0

ok-私は行って、あなたの 'code' _Type_' code'アイデアを使って手段のアイデアを追加しました。私はタイプ1が私が探していたものであることを知りました。そして、データステップを使ってそれらのサブセットをサブセット化したとき、それらはファイル内で正しいです。 proc手段にはorganization_idの列がありますが、列に情報が含まれていないため、データのステップを実行するときに引き継がれません。それがどんな考えですか? – Questioner

+0

"あらゆる情報"が何を意味するか分かりません。 'PROC MEANS'の後のあなたのデータストアは何ですか? – Foxer

関連する問題