Como usar a instrução retain no sas (com exemplos)
Você pode usar a instrução RETAIN no SAS para especificar uma variável cujo valor não deve ser definido como ausente no início de cada iteração de uma etapa DATA .
A instrução RETAIN pode ser usada para diversas tarefas no SAS, mas aqui estão os três casos de uso mais comuns:
Caso 1: Use RETAIN para calcular uma soma cumulativa
data new_data;
set original_data;
retain cum_sum;
cum_sum + values_variable;
run ;
Caso 2: use RETAIN para calcular uma soma cumulativa por grupo
data new_data;
set original_data;
by grouping_variable
retain cum_sum_by_group;
if first.grouping_variable then cum_sum_by_group = values_variable;
else cum_sum_by_group = cum_sum_by_group + values_variable;
run ;
Caso 3: Use RETAIN para calcular uma contagem cumulativa por grupo
data new_data;
set original_data;
by grouping_variable
retain count_by_group;
if first.grouping_variable then count_by_group = 1 ;
else count_by_group = count_by_group + 1 ;
run ;
Os exemplos a seguir mostram como usar cada caso na prática com o seguinte conjunto de dados no SAS que mostra as vendas realizadas em dias consecutivos por diferentes lojas:
/*create dataset*/
data original_data;
input store $sales;
datalines ;
At 4
AT 5
At 2
B 6
B 3
B5
C 3
C 8
C 6
;
run ;
/*view dataset*/
proc print data = original_data;
Exemplo 1: Use RETAIN para calcular uma soma acumulada
O código a seguir mostra como usar a instrução RETAIN para criar uma nova coluna no conjunto de dados que exibe a soma acumulada das vendas:
/*calculate cumulative sum of sales*/
data new_data;
set original_data;
retain cum_sales;
cum_sales+sales;
run ;
/*view results*/
proc print data = new_data;
A nova coluna chamada cum_sales contém a soma acumulada dos valores da coluna vendas .
Por exemplo:
- Soma cumulativa na linha 1: 4
- Soma cumulativa na linha 2: 4 + 5 = 9
- Soma cumulativa na linha 3: 4 + 5 + 2 = 11
E assim por diante.
Neste exemplo, a instrução RETAIN define a variável chamada cum_sales como zero e, em cada iteração da etapa DATA , ela simplesmente adiciona o novo valor de vendas ao total acumulado de cum_sales .
Exemplo 2: Use RETAIN para calcular uma soma cumulativa por grupo
O código a seguir mostra como usar a instrução RETAIN para criar uma nova coluna no conjunto de dados que exibe a soma acumulada das vendas por loja:
/*calculate cumulative sum of sales by store*/
data new_data;
set original_data;
by store;
retain cum_sales_by_store;
if first.store then cum_sales_by_store = sales;
else cum_sales_by_store = cum_sales_by_store + sales;
run ;
/*view results*/
proc print data =new_data;
A nova coluna chamada cum_sales_by_store contém a soma acumulada dos valores da coluna vendas , agrupados por loja.
Neste exemplo, a instrução RETAIN define a variável chamada cum_sales_by_store como zero e, em cada iteração da etapa DATA , verifica se o valor na coluna da loja foi a primeira ocorrência desse valor específico.
Caso fosse a primeira ocorrência, o valor de cum_sales_by_store era definido como o valor da coluna vendas. Caso contrário, o valor na coluna sales foi adicionado ao valor existente para cum_sales_by_store .
Exemplo 3: Use RETAIN para calcular uma contagem cumulativa por grupo
O código a seguir mostra como usar a instrução RETAIN para criar uma nova coluna no conjunto de dados que exibe o número cumulativo de vendas por loja:
/*calculate cumulative count by store*/
data new_data;
set original_data;
by store
retain store_count;
if first.store then store_count = 1 ;
else store_count = store_count + 1 ;
run ;
/*view results*/
proc print data = new_data;
A nova coluna chamada store_count contém a contagem cumulativa de cada loja.
Neste exemplo, a instrução RETAIN define a variável chamada store_count como zero e, em seguida, em cada iteração da etapa DATA , verifica se o valor na coluna store foi a primeira ocorrência desse valor específico.
Se esta fosse a primeira ocorrência, o valor de store_count era definido como 1. Caso contrário, um valor 1 era adicionado ao valor existente para store_count .
Recursos adicionais
Os tutoriais a seguir explicam como executar outras tarefas comuns no SAS:
Como calcular soma por grupo no SAS
Como calcular a média por grupo no SAS
Como calcular uma média móvel no SAS