Estou em uma situação como a relatada aqui: https://communities.sas.com/t5/New-SAS-User/Transform-integer-into-decimal/mp/918994#M41156
Suponha que tenha os seguintes dados (todos numéricos, não caracteres):
data have; input Hosp1 Hosp2 ; cards; 71515 42731 48041 5761 4329 481 85201 42731 85220 5119 4280 40211 2510 4280 39 22 ; run;
O que eu gostaria é a seguinte saída:
Se eu tentar usar este código (como no yabwon):
data want; set have; array H hosp1 hosp2; do over H; H = H/(10**max(0,ceil(log10(H))-3)); end; format hosp1 hosp2 best.; run;
A saída é a seguinte:
Em outras palavras, 4280 se torna 428, mas eu gostaria de 428,0. O mesmo para 2510. Existe uma maneira de evitar isso?
Agradeço antecipadamente
Não há diferença entre o número que 428 representa e o número que 428,0 representa.
Se os zeros à direita após o ponto decimal forem significativos, você precisará armazenar o valor como uma sequência de caracteres. (Observe que não há necessidade de se preocupar em usar ARRAYs para apenas duas variáveis.)
Você pode usar um
PICTURE
formato personalizado.Exemplo:
Histórico
O que você quer é uma variável de caractere , não uma variável numérica; essa é a única coisa que pode corresponder perfeitamente ao que você está pedindo.
A maneira de lidar com isso é manter o valor numérico verdadeiro e, em seguida, armazenar a largura e o comprimento decimal em outros campos; em seguida, use a
put
função com essas variáveis para armazenar o resultado final em um campo de caracteres.Os números SAS são decimais de ponto flutuante, não do tipo Decimal.
A outra opção é usar DS2, que possui um tipo Decimal.
https://documentation.sas.com/doc/en/vdmmlcdc/8.1/ds2pg/n0v130wmh3hmuzn1t7y5y4pgxa69.htm