Подгруппировать данные по группам по пропорциям в SAS - PullRequest
0 голосов
/ 30 апреля 2020

В этих данных мне нужно подмножество каждой переменной на определенный процент. Например,

Obs Group Score
1     A    1
2     A    2
3     B    1
4     B    1
5     C    3
6     C    1
7     C    1
8     A    1
9     A    3
10    A    1
11    A    2
12    B    3
13    C    2

Мне нужно было бы установить 10 obs. Выборка должна состоять из всех групп, а оценка 1 имеет более высокий приоритет. Каждой группе дается определенный процент. Допустим, 50% для A, 20% для B и 30% для C.

Я попытался использовать pro c surveyselect, но это не удалось. Количество allo c отличается от страты.

proc surveyselect data=example out=test sampsize=10;
strata group score/alloc=(0.5 0.2 0.3);
run;

1 Ответ

0 голосов
/ 30 апреля 2020

Я не знаю proc surveyselect слишком много, поэтому я даю версию шага данных.

data have;
    input Obs Group$ Score;
    cards;
1     A    1
2     A    2
3     B    1
4     B    1
5     C    3
6     C    1
7     C    1
8     A    1
9     A    3
10    A    1
11    A    2
12    B    3
13    C    2
;
run;

proc sort;
    by Group Score;
run;

data want;

    array _Dist_[3]$ _temporary_('A','B','C');
    array _Upper_[3] _temporary_(5,2,3);
    array _Count_[3] _temporary_;

    do i = 1 to rec;
        set have nobs=rec point=i;
        do j = 1 to dim(_Dist_);
            _Count_[j] + (Group=_Dist_[j]);
            if _Count_[j] <= _Upper_[j] and Group = _Dist_[j] then output;
        end;
    end;
    stop;
    drop j;
run;

...