Alterando Comprimento de Campo Novo no SAS

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:

Nesta tabela, há um campo chamado cd_estado contendo o código para cada estado. Você deseja criar um campo estado contendo o nome dos estados de acordo com o código informado:

data tabela_vendas_v2;
    set tabela_vendas;
    if cd_estado = 1 then estado = "BAHIA";
    else if cd_estado = 2 then estado = "SÃO PAULO";
    else estado = "MINAS GERAIS";
run;

O código acima leu a sua tabela chamada TABELA_VENDAS e criou o campo ESTADO de acordo com o de-para informado. Entretanto, como o primeiro nome atribuído foi BAHIA, o SAS entendeu que o campo ESTADO tem comprimento 5. Portanto, o resultado do código foi esse:

Uma solução que eu vejo nos códigos de algumas pessoas é colocar o maior nome no primeiro if ou então deixar espaços em branco:

/*exemplo 1*/
data tabela_vendas_v2;
    set tabela_vendas;
    if cd_estado = 1 then estado = "BAHIA      ";
    else if cd_estado = 2 then estado = "SÃO PAULO";
    else estado = "MINAS GERAIS";
run;
/*exemplo 2*/
data tabela_vendas_v2;
    set tabela_vendas;
    if cd_estado = 3 then estado = "MINAS GERAIS"
    else if cd_estado = 1 then estado = "BAHIA";
    else estado = "SÃO PAULO";
run;

O resultado de ambos seria:

A forma mais eficaz, no entanto, é utilizando a função attrib para criar o campo no comprimento desejado:

data tabela_vendas_v2;
    set tabela_vendas;
    attrib estado format=$25.;
    if cd_estado = 1 then estado = "BAHIA";
    else if cd_estado = 2 then estado = "SÃO PAULO";
    else estado = "MINAS GERAIS";
run;

Esse último script também cria a Tabela 3, mas com o campo estado com comprimento 25. Sendo assim, é possível inserir qualquer nome ali que tenha até 25 caracteres.

5 comentários em “Alterando Comprimento de Campo Novo no SAS”

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *