我在C#中试过这个,但没有太多成功。所以我现在正在尝试SAS。使用EG会话和我的SAS代码,我们与SASHELP.CLASS中的学生列表一起工作。 这些人希望彼此了解对方,并每月随机配对一起在咖啡日期。SAS:咖啡人?
规则: 随机生成咖啡日期列表每月生成; 我将每个月的配对存储到我每月追加的历史数据集中。
一个人在6个月的时间内不能与同一人一起喝咖啡。因此,我们保持历史的目的的独立数据集3个瓦尔: LastDate,InviterID,InvitedID
我们核对历史列表中的每个配对,而我们只有最后的6个月的数据加载到一个临时数据集用于检查的目的。
如果找不到最近匹配的对,则将新匹配对添加到新的配对数据集中,并从原始参与者数据集中删除2个名称(行),直到数据集少于2行。 (一个人不能与另一个人配对)
不幸的是,我们在这个列表中有19个人,所以一个人将被排除在外,直到我们可以添加一个新的参与者。有人有兴趣加入我们的咖啡俱乐部吗? :-)
所以我通过派生和数据集ID(ñ)开始,我只保留名称
Data Participants(Keep=ID Name);
FORMAT ID 8.;
set SASHelp.class;
ID=_n_;
run;
这19人将成为我在咖啡俱乐部参加。
我或多或少遵循思想路线:
data _null_;
randvar = ceil(rand('UNIFORM') * 100000);
call symput('RANDSEED', randvar);
run;
data CR.names2(keep=MEMID randid);
set CR.MasterNames;
randid = rand('UNIFORM');
run;
proc sort data=CR.names2 ; by randid; run;
data CR.pairs(keep=pairgrp MEMID);
set CR.names2 nobs=num_peeps;
pairgrp+1;
if pairgrp > floor(num_peeps/2) then pairgrp=1;
run;
proc sort data=CR.pairs; by pairgrp;run;
proc transpose data=CR.pairs
out=CR.pairs2 (drop=_NAME_);
var memid;
by pairgrp;
run;
Data CR.Pairs3;
set CR.pairs2;
rename COL1=InviterID COL2=InvitedID;
run;
但我卡住:-( 我需要休息,请帮助...
有其他人做这种类型的成功之前随机配对?我在这里抓救命稻草...... 任何帮助非常赞赏。 莱恩