BookmarkSubscribeRSS Feed
Lucasmarques94
Calcite | Level 5

Eu tenho esse código:

/* Sort both data sets by strata */
proc sort data='TABELA MULTISKILL BASE'n;
by operador;
run;

proc sort data=maxsizetb;
by operador;
run;

/* Initial sample using SAMPRATE */
proc surveyselect data='TABELA MULTISKILL BASE'n samprate=100 out=A;
strata operador;
run;

/* Split out the strata that have a max size */
data B1 B2;
merge A (in=inA) maxsizetb (in=inMaxSize);
by operador;
if inA and inMaxSize then output B1;
else if inA then output B2;
run;

/* Apply the max size using the N=<data set> and SELECTALL Options */
proc surveyselect data=B1 N=maxsizetb (rename=(_maxsize_ = _NSIZE_)) out=C selectall;
strata operador;
run;

/* The final sample is a combination of B2 and C */
data final;
set B2 C;
run;

a tabela multiskill é onde tem todas as informações que eu preciso (nome do operador, dia do atendimento, complexidade e etc), e a tabela maxsizetb tem o nome de cada um dos operadores e o numero 1, ou seja, nesse projeto ele seleciona uma amostra para cada um dos operadores, porem como eu disse essa amostra não segue uma condição que é selecionar 1 amostra por operador mas que também siga um padrão já predefinido da complexidade, que é 55% baixa, 35% media e 10% alta. Ele simplesmente seleciona aqueles casos eu que se tem mais atendimento. Como eu faço para colocar este outro critério? Pode ser outro código sem ser o survey select. Resumindo o projeto: tenho uma tabela base com todos os atendimentos realizados no callcenter e preciso selecionar uma amostra dessa tabela para fazer monitoria dos atendimentos, essa amostra consiste em selecionar 1 amostra para cada um dos operadores presentes nessa tabela base, e que essa amostra seja 55% baixa complexidade, 35% media complexidade e 10% alta complexidade, esta porcentagem é baseada na quantidade de operadores distintos que tem na tabela base, exemplo se eu tiver 100 operadores diferentes a amostra final tem que ser 55 baixa, 35 media e 10 alta e assim sucessivamente.

1 REPLY 1
ronaldosc
Fluorite | Level 6

Pode tentar isso?

/* Supondo que a tabela 'TABELA MULTISKILL BASE'n seja a tabela base com informações sobre atendimentos */
/* Supondo que 'maxsizetb' tenha os operadores e uma variável que indica a complexidade */

/* Crie uma tabela com as proporções desejadas para cada complexidade */
data proporcoes;
input complexidade $ percentagem;
datalines;
baixa 55
media 35
alta 10
;


/* Crie uma tabela com as proporções desejadas para cada operador */
data operador_proporcoes;
set 'TABELA MULTISKILL BASE'n;
by operador;
if first.operador then total_atendimentos=0;
total_atendimentos+1;
output;
if last.operador then do;
percentual_atendimentos=total_atendimentos;
output;
end;
drop total_atendimentos;
run;


/* Crie uma tabela combinando as proporções de complexidade e operador */
data combinacao_proporcoes;
merge proporcoes operador_proporcoes;
by complexidade;
drop percentagem;
run;


/* Classifique a tabela base por complexidade em ordem decrescente */
proc sort data='TABELA MULTISKILL BASE'n;
by descending complexidade;
run;


/* Inicialize a tabela final */
data final;
drop percentual_atendimentos;
set 'TABELA MULTISKILL BASE'n;

/* Adicione uma variável aleatória entre 0 e 1 para a amostragem */
random_number = ranuni(0);

/* Mescla com as proporções de complexidade e operador */
if merge(combinacao_proporcoes) = 0 then stop;

/* Selecione apenas os registros que atendem aos critérios de amostragem */
if random_number <= percentagem / percentual_atendimentos then output;
run;


/* Agora a tabela 'final' contém a amostra desejada ponderada por complexidade para cada operador */