Muitas vezes no SAS precisamos criar novos campos. No entanto, é preciso saber lidar com o comprimento dos campos. Por exemplo, suponha que você tenha uma tabela com informações de vendas das suas lojas:
Etiqueta: programacao em sas
SAS Group By no R
Já aprendemos como somar e agrupar os dados no SAS aqui, no R isso é tão simples quanto, basta você utilizar a função tapply(). A função é composta basicamente de três elementos: o vetor contendo valores, o campo que será utilizado no agrupamento e a função que será aplicada. Continuar a ler “SAS Group By no R”
Tratando Duplicidades no SAS
É comum encontrar campos duplicados em uma tabela. Seja porque algum join ou agrupamento que poderia ter sido melhor realizado (mesmo não trazendo informações erradas), por causa de algum erro de inserção da informação ou qualquer outra coisa. No SAS, há algumas maneiras práticas de tratar esse erro. Aqui você vai aprender a ordenar sua tabela com PROC SORT, exluir duplicidades com NODUPKEY, gerar uma tabela com os valores que estavam duplicados utilizando DUPOUT e excluir duplicidades por todos os campos com BY _ALL_.
Acompanhando a execução da macro no SAS
Convertendo diferentes formatos de data no SAS
*codigo que pega a tabela_old, com o campo data no formato 20DEC2016; *e cria uma tabela nova chamada tabela_new com a data no formato 20/12/2016; data tabela_new; set tabela_old; format data ddmmyy10.; run;
Proc Sort no R
Muita gente sabe utilizar o proc sort para ordenar os campos no SAS.
Por exemplo, podemos ordenar uma tabela chamada dados_entrada pelas colunas campo1 e campo2, do menor para o maior valor, e ter como saída uma tabela dados_saida (exemplo 1). E podemos também ordenar uma tabela chamada dados_entrada pelas colunas campo1, do menor para o maior, e campo2, do maior para o menor valor, e ter como saída uma tabela dados_saida (exemplo 2). Bastaria utilizar:
* exemplo 1 proc sort data= dados_entrada out= dados_saida; by campo1 campo2; run; * exemplo 2 proc sort data= dados_entrada out= dados_saida; by campo1 descending campo2; run;
A mesma coisa, que nem todo mundo sabe, pode ser feita no R, e é até mais simples:
## exemplo 1 dados_saida = dados_entrada[order(dados_entrada$campo1, dados_entrada$campo2),]; ## exemplo 2 dados_saida = dados_entrada[order(dados_entrada$campo1, -dados_entrada$campo2),];
R sendo R!
Gerar amostras aleatórias simples no SAS
Em diversos estudos estatísticos, seja para fazer uma pesquisa de mercado ou um modelo estatístico, é necessário gerar uma amostra aleatória. No SAS, isso é bem simples:
/*Substitua os nomes: tabela_entrada, amostra_gerada *\ /* e tamanho_da_amostra *\ proc surveyselect data= tabela_entrada out= amostra_gerada n = tamanho_da_amostra method=SRS; run;
Ps.: As amostras são sem reposição!
Empilhando bases no SQL
Mais um post rápido, em que o título fala por si só.
Primeiro, uma query que vai unir as duas tabelas, removendo duplicidades:
select * from table1 union select * from table2
Query que vai unir as duas tabelas, sem remover duplicidades. Ou seja, se tivermos todas as colunas idênticas, a tabela final terá linhas idênticas:
select * from table1 union all select * from table2
Lembrando que o SQL pode ser utilizado no SAS, contanto que você inicie com um proc sql!
Proc Means
No SAS, uma das melhores formas de se obter estatísticas descritivas é através do proc means. Além de ser possível obter média, mediana e moda, você consegue diferentes faixas de percentil, observações missing e até mesmo gerar estatísticas cruzando variáveis.
Veja algumas maneiras de se utilizar o proc means com a nossa conhecida base german_credit_2:
1. Primeiro, vamos obter algumas informações para a variável DurationOfCreditMonth utilizando o proc means da maneira mais simples possível:
proc means data= german_credit_21; var DurationOfCreditMonth; run;
2. Em alguns momentos você pode precisar gerar as informações segregadas por diferentes grupos. Por exemplo, você pode precisar da mediana da dívida dos clientes por cada estado, ou a média das notas dos alunos por matéria. Em nosso exemplo, vamos observar como a variável DurationOfCreditMonth se diferencia entre clientes com Creditability = 1 e Creditability = 0:
proc means data=tmp.german_credit_21; class Creditability; var DurationOfCreditMonth; run;
3. Média, mediana e desvio padrão são medidas interessantes e auxiliam na interpretação dos números. No entanto, você pode estar interessado em entender mais a respeito da distribuição desses números. Uma forma de entender isso, é através de algum percentil:
proc means n mean std p10 p25 p50 p75 data=tmp.german_credit_21; class Creditability; var DurationOfCreditMonth; run;
4. Agora que você já possui alguns números para entender melhor a variável, pode ser uma boa ideia deixar o seu resultado mais limpo limitando a duas casas decimais com o maxdec:
proc means n mean std skew p10 p25 p50 p75 data=tmp.german_credit_21 maxdec=2; class Creditability; var DurationOfCreditMonth; run;
5. Não é tão interessante quanto os primeiros itens, mas salvar seus resultados em uma tabela – que aqui chamamos de tabela_saida – pode ser útil, principalmente em processos mais automáticos:
proc means data=tmp.german_credit_21; class Creditability; var DurationOfCreditMonth; output out=tabela_saida sum=soma mean=media p50=mediana; run;
6. Outra coisa que podemos fazer, semelhante ao que fizemos no item 2, é gerar essas medidas para mais variáveis dividindo todas pelo Creditability ou então, gerar as medidas da variável por outras classes:
proc means data=tmp.german_credit_21; class Creditability; var DurationOfCreditMonth Purpose; output out=tabela_saida sum=soma mean=media p50=mediana; run;
proc means data=tmp.german_credit_21; class Creditability Purpose; var DurationOfCreditMonth; output out=tabela_saida sum=soma mean=media p50=mediana; run;
BÔNUS:
Para incluir os dados missing e ainda contar o número de observações missing, acrescente missing e nmiss no proc means:
proc means data= <nome da base> missing nmiss; class <classe - nao obrigatorio>; var <variavel>; run;
SAS: Executando diversos códigos em um só com o include
Assim como é possível chamar outros códigos no R e utilizar algumas funções prontas, no SAS algo semelhante pode ser feito declarando INCLUDE.
Quando você utiliza o include seguido de um caminho com um programa SAS, o que vai acontecer é que esse programa será executado. Sendo assim, você pode rodar diversos códigos em um projeto só, pode consolidar as suas libnames em um lugar só, enfim, há várias alternativas, todas com o include.
Uma situação hipotética: sua empresa possui uma base padrão, dentro de um DW qualquer, com um campo de data no formato string “ddmmaaaa”. Vamos supor que você tenha criado um projeto no qual um dos programas seja uma macro, denominada trata_data, que recebe a base padrão e converte o campo string para o formato data padrão do SAS. Você utilizou essa macro nesse projeto, mas ela é pode ser útil em vários outros estudos. O que você pode fazer é salvar essa macro como um programa em um diretório e quando você precisar utilizá-la em outro código, você utilizará algo como a sintaxe:
*chama a macro que tratara a data da base padrao (base_in) *e gera uma base com campo tratado (base_out); %include '/sasdata/minhaempresa/macro_trata_data.sas'; %trata_data(base_in, base_out);
Outra forma de utilizar o include é na automatização de alguns processos. Vamos supor que você tenha criado um modelo estatístico que gera o rating das empresas clientes do seu banco e você deseja automatizar o processo de geração de rating para várias bases diferentes que chegarão mensalmente. Para isso, você pode criar diversos programas que receberão algumas variáveis, como a base de entrada e uma base de cadastro que enriquecerá a base de entrada, e rodá-los todos com o include. O exemplo abaixo pressupõe um programa chamado gera_rating_empresa.sas e dentro desse programa você possui duas variáveis/bases que devem ser passadas pelo usuário chamadas base_in e base_endereco (lembre-se que no programa elas precisam ser chamadas com &base_in e &base_endereco):
*insira o nome da base de entrada com campo CNPJ com 14 dígitos (string); %let base_in = base_entrada_yyyymmdd; *passe a base que enriquecera com as informacoes de endereco; %let base_endereco = base_endereco_yyyymmdd; *execute o programa; %include "/sasdata/.../gera_rating_empresa.sas";
Não se esqueça de ficar craque em macros / let: Macros e a expressão Let no SAS