I tried this in C# but have not had much success. So I am now trying in SAS. Using an EG session and my SAS code, we work with the list of students in SASHELP.CLASS. These people want to get to know each other and have a monthly random pairing to go on a Coffee Date.
Rules: A random Coffee Date List is Generated monthly; I store each months pairing into a Historical Dataset, which I append monthly.
One person cannot have coffee with the same person within a 6 month period. So we keep a separate dataset for historical purposes with 3 Vars: LastDate,InviterID,InvitedID
We check each pairing against the Historical list of which we only load the most recent 6 months data into a temp dataset for checking purposes.
If no recent matched pair is found, a new matched pair is added to a new Paired Dataset, and the 2 names (Rows) are removed from the original Participants dataset until the dataset has less than 2 rows. (a single person cannot be paired with another)
Unfortunately we have 19 people in this list so one person will be left out until we can add a new participant. Is anyone interested in joining our coffee club? :-)
So I start by deriving and ID (n) from the dataset, and I only keep the Name
Data Participants(Keep=ID Name); FORMAT ID 8.; set SASHelp.class; ID=_n_; run;
These 19 People will be my Participants in the Coffee Club.
I more or less follow the line of thought:
data _null_; randvar = ceil(rand('UNIFORM') * 100000); call symput('RANDSEED', randvar); run; data CR.names2(keep=MEMID randid); set CR.Participants; 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;
But I get stuck :-( I need help with the rest please...
Has anyone else done this type of random pairing successfully before? I am grasping straws here...
I think at this point I still need to check if the selected pair exists in the Historical dataset, if not, I can add them into a currentselectedpair dataset, and remove them from the list of Participants.
The remaining people in Participants are then processed and paired again, checked again, until the list is empty or in our case less than 2 items.
Any help much appreciated. Len