Random 随机选择10名受试者并保留其所有观察结果
我在SAS中遇到了以下问题。我有一个这种格式的数据集: 数据集由500个ID组成,每个ID有不同数量的观察值。我试图随机选择5个ID,同时保留它们的所有观察值。我首先构建了一个随机生成器,保存了一个间隔为10个数字的向量[1500]。然而,当我试图使用这个向量来选择与随机数对应的ID时,它变得很笨拙。更清楚地说,我希望我的净结果是一个数据集,其中包括与ID 1、10、43、22、67或任何其他5个数字序列相对应的所有观察值Random 随机选择10名受试者并保留其所有观察结果,random,sas,grouping,sample,Random,Sas,Grouping,Sample,我在SAS中遇到了以下问题。我有一个这种格式的数据集: 数据集由500个ID组成,每个ID有不同数量的观察值。我试图随机选择5个ID,同时保留它们的所有观察值。我首先构建了一个随机生成器,保存了一个间隔为10个数字的向量[1500]。然而,当我试图使用这个向量来选择与随机数对应的ID时,它变得很笨拙。更清楚地说,我希望我的净结果是一个数据集,其中包括与ID 1、10、43、22、67或任何其他5个数字序列相对应的所有观察值 任何提示都将不胜感激 根据你的问题,我假设你已经有了10个随机数。如果
任何提示都将不胜感激 根据你的问题,我假设你已经有了10个随机数。如果它们保存在表/数据集中,您可以按id在它们和原始数据集中之间运行左联接。这将提取具有相同id的所有原始观测值 假设您随机选择的数字保存在一个名为“random_id”的表中。然后,您可以执行以下操作:
proc sql;
create table want as
select distinct
t1.id,
t2.*
from random_ids as t1
left join have as t2 on t1.id = t2.id;
quit;
如果您的随机数未保存在数据集中,则只需将其复制到where语句中,如:
proc sql;
create table want as
select distinct
*
from have
where id in (1 10 43 22 67) /*here you put the ids you want*/
quit;
最好,
Proc SURVEYSELECT
是你的朋友
data have;
call streaminit(123);
do _n_ = 1 to 500;
id = rand('integer', 1e6);
do seq = 1 to rand('integer', 35);
output;
end;
end;
run;
proc surveyselect noprint data=have sampsize=5 out=want;
cluster id;
run;
proc sql noprint;
select count(distinct id) into :id_count trimmed from want;
%put NOTE: &=id_count;
如果您的SAS许可证中没有此过程,您可以根据k/n
算法进行样本选择。注:k/n最早的存档文章是基于1995年《SAS观察》杂志文章的代码
proc sql noprint;
select count(distinct id) into :N trimmed from have;
proc sort data=have;
by id;
data want_kn;
retain N &N k 5;
if _n_ = 1 then call streaminit(123);
keep = rand('uniform') < k / N;
if keep then k = k - 1;
do until (last.id);
set have;
by id;
if keep then output;
end;
if k = 0 then stop;
N = N - 1;
drop k N keep;
run;
proc sql noprint;
select count(distinct id) into :id_count trimmed from want_kn;
%put NOTE: &=id_count;
procsqlnoprint;
选择count(distinct id)到:N从have中修剪;
proc sort data=have;
按身份证;
数据需求量;
保留N&N k 5;
如果_n_=1,则调用streaminit(123);
keep=rand(‘统一’)
这是以前多次提出的问题。查找Proc SURVEYSELECT
或“k/n
random sampling”你说的vector
-你在使用SAS/IML吗?还是base SAS?@Richard我想你可能误解了这个问题-这与正常的抽样问题(无论是不是IML问题)有点不同。你能展示一下你的随机生成器吗?是否有不使用RAND
功能的原因?