Conversao

Conversão texto para número no data step e proc sql

O jeito mais simples de converter de texto para número no data step é simplesmente multiplicar a coluna por 1:

Leia mais…

Anúncios

Convertendo diferentes formatos de data no SAS

Essa é intuitiva, mas não sei se todo mundo conhece. Então, se você leu Como calcular a diferença entre duas datas no SAS? e Formatando Datas no SAS, agora que já conseguiu criar colunas e mudar formato numérico para data, pode ainda querer trocar aquela data 20DEC2016 para 20/12/2016. Isso pode ser feito com o format:
*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;

Conversão de Número para Texto no SAS

Já falei sobre como lidar com datas no SAS no post Formatando Datas no SAS e Como calcular a diferença entre duas datas no SAS?. Agora é hora de aprender como lidar com os formatos número e texto.

 

Utilizando os dados german_credit_2, primeiro criamos um campo chamado documento contendo alguns números aleatórios. Isso é algo comum de se encontrar por aí, conjuntos de dados nos quais o campo CPF ou RG está no formato numérico. Lidar com esses dados pode ser um problema, pois algumas vezes esse documento pode conter zeros na frente. Para solucionar esse problema, vamos converter o campo documento em formato numérico para um campo no formato texto  de três maneiras utilizando a função put(): colocando zeros na frente do número; sem colocar zeros e apenas passando o comprimento do campo; deixando o campo alinhado a esquerda, evitando espaços em branco que ficariam na opção padrão do SAS:
** Cria uma coluna com numeros de documento aleatorios;
data german_credit_21_v2;
     set tmp.german_credit_21;
     documento = round(rand("Uniform"),.000001)*1000000;
run;

** Converte a coluna documento para caracter;
data german_credit_21_v3;
     set german_credit_21_v2;

     *acrescenta zero;
     documento_zero = put(documento, z15.);

     *alinhado a direita por default;
     documento_str = put(documento, 15.);

     *alinha a esquerda;
     documento_teste = put(documento, 15. -L);
run;
Agora, pode ser que o contrário ocorra. Você queira converter do formato texto para o numérico. Novamente, apresentamos mais de uma opção. Podemos converter simplesmente multiplicando por 1, ou então podemos utilizar a função input() do SAS:
** Converte caractere para numerico;
data german_credit_21_v4;
     set german_credit_21_v3;
     
     *forma mais simples de fazer a conversao;
     documento_nr1 = documento_zero*1;

     *utilizando input;
     documento_nr2 = input(documento_zero, 15.);*escolhe comprimento;
run;
A  mesma função input() faz outros tipos de tratamento, considerando campos com vírgula e campos com $. Veja como vamos lidar com os dois campos criados abaixo (esse exemplo você pode aplicar em qualquer conjunto de dados que você possua em mãos):
data german_credit_21_v5;
     set german_credit_21_v4;
     texto_com_virgula = '5,500';
     numeric_var_comma = input(texto_com_virgula , comma5.);

     texto_com_cifrao = '$5,500';
     numero_dolar = input(texto_com_cifrao , dollar5.);
     format numero_dolar dollar10.;
run;

Gostou do post? Por favor, não vá embora sem deixar uma curtida ou um comentário. Parece algo bobo, mas é um feedback bastante importante para este trabalho. Se encontrou algum erro ou tem alguma sugestão, dúvida, elogio ou crítica, pode escrever nos comentários ou me enviar uma mensagem diretamente em Sobre o Estatsite. E visite também a conta do Twitter @EstatSite.

Forte abraço e bons estudos!

Dica rápida: Acrescentando zero na frente do número no SAS

Sabe aquele cpf que algum sem noção mandou em formato numérico e veio com menos de 11 dígitos na sua base?

Para deixá-lo com 11 dígitos e com zero na frente é simples, use o put() e o ‘z11.’ na sequência.

Por exemplo, você recebeu a tabela Clientes, na qual a coluna DOCUMENTO veio em formato numérico, ou seja, muitos não vão ter 11 dígitos, e você pode querer o CPF correto por diversos motivos. A conversão é simples, você utiliza um length apenas para garantir o comprimento da variável correto e manda bala no put:

data clientes_v2;
    set clientes;
    length cpf $11.;
    cpf = put(documento, z11.);
run;