1

これが私が持っているデータです。proc tabulate を使用して、Excel でどのように表示されるかを示し、視覚化を容易にします。目標は、グループが厳密に対角線より下にあることを確認することです (長方形、(1,1) (2,2)...(7,7) 「対角線」であることはわかっています)。対角または少なくとも 75 のグループ サイズになります。

      1   2   3    4    5    6   7  (month variable)
(age)
  1  80  90  100  110  122  141 88
  2  80  90  100  110   56   14 88
  3  80  90   87   45   12   41 88
  4  24  90  100  110   22  141 88
  5  0   1    0    0    0    0   2
  6  0   1    0    0    0    0   6
  7  0   1    0    0    0    0   2
  8  0   1    0    0    0    0  11

特定のデータ値を再グループ化するために既に if/then を使用しましたが、他のセットに対してそれを行う一般的な方法が必要です。前もって感謝します

望ましい結果

   1  2   3    4    5    6   7  (month variable)
(age)
  1  80  90  100  110  122  141 88
  2  80  90  100  110   56   14 88
  3  104 90   87   45   12   41 88
  4  0   94  100  110   22  141 88
  5  0   0    0    0    0    0   2
  6  0   0    0    0    0    0   6
  7  0   0    0    0    0    0   13
  8  0   0    0    0    0    0   0
4

1 に答える 1

0

カウントする必要のある患者のカテゴリ データをモックアップする

data mock;
  do patient_id = 1 to 2500;
    month = ceil(7*ranuni(123));
    age = ceil(8*ranuni(123));
    output;
  end;
  stop;
run;

質問に示されているようなカウント (N) の表を作成します。

options missing='0';

proc tabulate data=mock;
  class month age;
  table age,month*n=''/nocellmerge;
run;

月ごとにサブ対角線の患者数を取得します

proc sql;
/*  create table subdiagonal_column as */
  select month, count(*) as subdiag_col_freq
  from mock
  where age > month
  group by month;

行ごとに、対角線前の患者数を取得します

/*  create table prediagonal_row as */
  select age, count(*) as prediag_row_freq
  from mock
  where age > month
  group by age;

カテゴリ値が+1単調でない場合、他のセットは扱いにくい場合があります。非単調なカテゴリ値に対して同様のプロセスを実行するには、+1 単調な代理変数を作成する必要があります。例えば:

data mock;
  do item_id = 1 to 2500;
    pet = scan ('cat dog snake rabbit hamster', ceil(5*ranuni(123)));
    place = scan ('farm home condo apt tower wild', ceil(6*ranuni(123)));
    output;
  end;
run;

proc tabulate data=mock;
  class pet place;
  table pet,place*n=''/nocellmerge;
run;

proc sql;
  create table unq_pets as select distinct pet from mock;
  create table unq_places as select distinct place from mock;

data pets;
  set unq_pets;
  pet_num = _n_;
run;

data places;
  set unq_places;
  place_num = _n_;
run;

proc sql;
  select distinct place_num, mock.place, count(*) as subdiag_col_freq
  from mock 
  join pets on pets.pet = mock.pet
  join places on places.place = mock.place
  where pet_num > place_num
  group by place_num
  order by place_num
  ;
于 2017-12-06T10:16:59.003 に答える