Как определить подмножество выбора процента населения? - PullRequest
0 голосов
/ 23 марта 2020

Мне нужно было бы рассчитать процент населения. В частности, мне нужно 10% от начальной популяции, чтобы определить новое подмножество. Я попытался использовать

proc sql;
select time, 
      count(*)*0.1
from table1
group by 1;
quit;

, и это работает, так как у меня есть процент населения, который я хотел. Однако у меня возникают трудности с поиском способа, который позволил бы мне включить другое условие (where var1>0 and var2=24), в котором переменные взяты из исходного набора данных (то есть var1 и var2 из таблицы1). Ты знаешь, как я мог это сделать?

1 Ответ

2 голосов
/ 23 марта 2020

Предположим, у вас есть 1000 элементов (строка), из которых требуется 10% случайной выборки.

Proc SURVEYSELECT, вероятно, является лучшим способом выбора выборок.

data have;
  do id = 1 to 1000; output; end;
run;

proc surveyselect noprint data=have method=srs rate=10 out=want;
run;

A * Выбор 1013 * на основе случайного числа может дать грубый аналог, но не дает точной частоты выборки 10%.

proc sql;
  create table want as
  select id from have
  where rand('uniform') <= 0.10  %* roughly 10% of a uniform distribution;
;

Существуют и другие способы, например шаг DATA с алгоритмом k/n.

data want;
  call streaminit(123);

  do k=0.10*N by 0 while (k > 0);
    set have nobs=n;

    if rand('UNIFORM') <= k/n then do;
      k + (-1);
      output;
    end;
    n +(-1);
  end;

  stop;
run;
...