Как генератор случайных чисел SAS помог определить победителей розыгрыша среди стажеров компании разных лет

Недавно SAS проводила опрос среди стажеров компании разных лет и разыгрывала призы между его участниками. Чтобы выбрать победителей, мы создали генератор случайных чисел на ПО SAS. Здесь мы расскажем, по какому принципу работал генератор, и поделимся ссылкой на код.

Всего для розыгрыша было подготовлено 3 первых приза, 5 вторых призов и 20 третьих призов:

Первый приз: Бесплатная попытка сдачи сертификационного экзамена из списка, кроме сертификации Predictive Modeling using SAS Enterprise Miner, по выбору победителя.

Второй приз: Сертификат на бесплатное обучение на одном курсе из списка по выбору победителя.

Третий приз: Любая книга из списка SAS Press по выбору победителя.

По условиям конкурса, каждый участник мог получить только один приз. Поэтому для определения счастливчиков после окончания опроса мы провели следующую процедуру выбора победителей:

  1. Составили список всех претендентов на первый приз и выбрали три случайных имени из этого списка с помощью процедуры генерации случайной выборки SAS SURVEYSELECT* пакета SAS/STAT.
  2. Затем составили список всех претендентов на второй приз, за исключением тех, кто уже получил первый приз. Также с помощью SAS SURVEYSELECT* пакета SAS/STAT выбрали пять случайных имен из этого списка.
  3. И составили третий список со всеми претендентами на последний приз, за исключением тех, кто уже получил первый или второй приз, и точно также выбрали двадцать случайных имен, используя SAS SURVEYSELECT*

 

* Процедура SURVEYSELECT реализует вероятностные методы для генерации случайных выборок. Использование этих методов исключает смещения и зависимости при выборе наблюдений и позволяет использовать статистическую теорию для достоверных статистических выводов при исследовании популяции наблюдений.
https://support.sas.com/documentation/cdl/en/statug/63347/HTML/default/viewer.htm#statug_surveyselect_sect001.htm

Код использованной программы представлен ниже:


data books certs courses;
set work.survey;
if find('Интересно ли Вам'n, 'книгу') then output books;
if find('Интересно ли Вам'n, 'экзамен') then output certs;
if find('Интересно ли Вам'n, 'обучение') then output courses;
run;

proc surveyselect data=certs out=win_certs n=3;
run;

proc sql;
delete from books where '#'n in (select '#'n from win_certs);
delete from courses where '#'n in (select '#'n from win_certs);
quit;

proc surveyselect data=courses out=win_courses n=5;
run;

proc sql;
delete from books where '#'n in (select '#'n from win_courses);
quit;

proc surveyselect data=books out=win_books n=20;
run;

ods pdf file="c:\edu\all_winners.pdf";

proc print data=win_certs;
var '#'n 'First Name'n 'Last Name'n Country Email 'Интересно ли Вам'n;
run;

proc print data=win_courses;
var '#'n 'First Name'n 'Last Name'n Country Email 'Интересно ли Вам'n;
run;

proc print data=win_books;
var '#'n 'First Name'n 'Last Name'n Country Email 'Интересно ли Вам'n;
run;
ods pdf close;
A man circling a social network icon