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