1

我有一个测试和控制组数据。测试组和对照组的表都有 cust_id 和 NRx(数值)。测试组只有 300 行,而对照组有 40,000 行。我需要使用SAS选择300-400行对照组作为另一个表,使对照组的NRx与测试组的NRx在合理范围内紧密匹配。请帮忙!

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

首先确定您的选择标准(您对“合理范围”的评论);假设您想要包含来自 CONTROL 的记录,这些记录在 SAMPLE 平均值的正负一个标准差范围内。试试这个(一个没有替换的简单随机样本,见这个 SAS note):

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 回答