0

(初めての投稿)
別の変数に関連する条件を満たすことに基づいて、(SASで)新しい変数を作成する必要があるデータセットがあります。したがって、データには、調査からの 3 つの変数、Site、IDnumb (人)、および Date が含まれます。異なる人からの複数の回答がある可能性がありますが、同じサイトにあります (サイト A の人物 1 と 3 を参照)。

Site  IDnumb    Date 
    a     1      6/12
    b     2       3/4
    c     4       5/1
    a     3       .  
    d     5       .  

Complete という名前の新しい変数を作成したいのですが、重複を含めることはできません。そのため、proc freq に移動するときに、完了した調査の 6/12 の日付を使用して、サイト A を 1 回カウントする必要があります。したがって、基本的には、サイトが 2 回表され、1 つに日付が含まれている場合、その 1 つだけをカウントし、日付のない重複サイトを無視したいと考えています。

                N    %

Complete        3   75%
Last Month      1   25%

私の質問は、NODUP と NODUPKEY の可能性に関するものかもしれません。サイトと日付で Proc Sort (nodupkey) を実行すると、obs "a 3 ." が削除されますか?

どんな助けでも大歓迎です。これが私の最初の投稿であるため、ごちゃごちゃした「テーブル」で申し訳ありません(より良いものにするためのヒントも歓迎します)。

4

1 に答える 1

2

これにはいくつかの方法があります。

まず、完全/非完全なバイナリ変数が必要です。とにかくデータステップにいる場合は、そこですべてを実行することもできます。

proc sort data=yourdata;
by site date descending;
run;

data yourdata_want;
set yourdata;
by site date descending;
if first.site then do;
 comp = ifn(date>0,1,0);
 output;
end;
run;

proc freq data=yourdata_want;
tables comp;
run;

NODUPKEY を使用した場合は、最初に SITE DATE DESCENDING で並べ替え、次に NODUPKEY を使用した SITE で並べ替えます。そうすれば、最新の日付が一番上になります。また、COMP を 1/0 だけでなく、リストしたテキスト ラベルを持つようにフォーマットすることもできます。

DATE のフォーマットでも実行できるため、データのステップをスキップできます (まだソート/ソート nodupkey が必要です)。DATE のすべての非欠損値を「Complete」にフォーマットし、date の欠損値を「Last Month」にフォーマットしてから、proc freq に欠損オプションを含めます。

最後に、SQL でテーブルを作成できます (このように 2 つの行を取得するのは少し難しいですが、2 つのクエリを一緒に UNION する必要があります)。

于 2013-06-11T17:53:46.123 に答える