我有一组测试和控制数据。测试组和控制组的表都有cust_id和NRx(数值)。测试组中的行仅为300,而对照组为40,000。我需要使用SAS选择300-400行对照组作为另一个表,使得对照组中的NRx在合理范围内与测试组的NRx紧密匹配。请帮忙!
答案 0 :(得分: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个开始的每百个记录。
大多数数据库都支持row_number()函数。如果你没有,那么你可以在SAS的数据步骤中轻松做同样的事情。
答案 1 :(得分:0)
选择最接近测试组平均值的300。或者,将对照组与测试组成比例,并按照测试组中的分布比例从样本中抽取样本。
答案 2 :(得分:0)
首先确定您的选择标准(您对“合理范围”的评论);假设您想要包含来自CONTROL的记录,这些记录在SAMPLE的平均值的正负一个偏差范围内。试试这个(一个简单的随机样本,无需替换,请参阅this 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的值更改为您想要的任何样本大小。
答案 3 :(得分:0)
proc sql函数monotonic()将为您提供行号。
不支持/记录,因此请勿在生产系统中使用