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.
Ótima dica André Yukio.
Muito legal!
desta forma também funciona:
format estado $25.;
Boa!