データのテストおよびコントロールグループがあります。テストグループとコントロールグループの両方のテーブルには、cust_idとNRx(数値)があります。テストグループの行はわずか300ですが、コントロールグループの行は40,000です。コントロールグループのNRxがテストグループのNRxと妥当な範囲内で厳密に一致するように、SASを使用して別のテーブルとして300〜400行のコントロールグループを選択する必要があります。助けてください!
4 に答える
最善の方法は、おそらく、ソートされたコントロール リストの 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 のデータ ステップで同じことを簡単に行うことができます。
テストグループの平均に最も近い300を選択します。または、テストグループに比例してコントロールグループをビンに入れ、テストグループの分布に比例してビンからサンプルを引き出します。
まず、選択基準(「合理的な範囲」に関するコメント)を決定します。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の値を任意のサンプルサイズに変更します。
proc sql 関数 monotonic() は、行番号を提供します。
サポートも文書化もされていないため、本番システムでは使用しないでください