1

データのテストおよびコントロールグループがあります。テストグループとコントロールグループの両方のテーブルには、cust_idとNRx(数値)があります。テストグループの行はわずか300ですが、コントロールグループの行は40,000です。コントロールグループのNRxがテストグループのNRxと妥当な範囲内で厳密に一致するように、SASを使用して別のテーブルとして300〜400行のコントロールグループを選択する必要があります。助けてください!

4

4 に答える 4

1

最善の方法は、おそらく、ソートされたコントロール リストの n 番目のサンプルを実行することです。

SQL では、次の構文を使用して特定のデータベースでこれを行うことができます。

select t.*
from (select t.*, row_number() over (order by cust_id) as seqnum
      from t
     ) t
where mod(t, 100) = 7

これにより、テスト グループの 7 番目から始まる 100 番目ごとのレコードが選択されます。

ほとんどのデータベースは、row_number() 関数をサポートしています。そうでない場合は、SAS のデータ ステップで同じことを簡単に行うことができます。

于 2012-06-23T14:31:24.003 に答える
0

テストグループの平均に最も近い300を選択します。または、テストグループに比例してコントロールグループをビンに入れ、テストグループの分布に比例してビンからサンプルを引き出します。

于 2012-06-23T14:45:59.243 に答える
0

まず、選択基準(「合理的な範囲」に関するコメント)を決定します。SAMPLEからの平均の±1標準偏差以内にあるCONTROLからのレコードを含めるとします。これを試してください(置換なしの単純なランダムサンプル。このSASノートを参照してください):

proc sql noprint;
  /* Find mean and std dev of TEST group into two macro variables */
  select mean(nrx)
      ,  std(nrx) 
  into :mean_nrx, :std_nrx
  from TEST;

  /* Create TARGET based on +/- 1 std deviation  */
  create table TARGET as
  select *
  from   CONTROL
  where  NRx between (&mean_nrx - &std_nrx) and (&mean_nrx + &std_nrx);
quit;

/* Create sample of size K from TARGET */
data sample(drop=k n);

  retain k 300 n;
  if _n_=1 then n=total;
  set TARGET nobs=total;

  if ranuni(1230498) <= k/n then do;
     output;
     k=k-1;
     end;

  n=n-1;

  if k=0 then stop;
run;

これにより、サンプルに適格なレコードを含むTARGETデータセットが作成されることに注意してください。Kの値を任意のサンプルサイズに変更します。

于 2012-06-23T15:55:31.263 に答える
0

proc sql 関数 monotonic() は、行番号を提供します。

サポートも文書化もされていないため、本番システムでは使用しないでください

于 2013-12-06T10:54:45.687 に答える