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 */

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
Discussion stats
  • 1 reply
  • 2731 views
  • 0 likes
  • 2 in conversation