Estos son unos pequeños trucos para conseguir añadir tantos ceros por la izquierda como necesitemos para conseguir un tamaño dado para una cadena. Vamos a imaginar, para los ejemplos que vamos a poner, que necesitamos conseguir que nuestro valor tenga siempre 10 caracteres y que en caso de necesitarlo le añadiremos tantos ceros por la izquierda como sea necesario.
Lo primero, no es lo mismo si partimos de un número o de una cadena de texto. Disponemos de un método para cada uno de esos casos. En todo caso, la salida del proceso tiene que ser siempre una cadena de texto.
Añadir ceros por la izquierda a un número
Creamos una tabla NUMEROS con unos cuantos números de ejemplo de distintas longitudes. Deseamos crear una cadena de texto que tenga 10 posiciones y que, en caso de necesitarlo, se complete con tantos ceros por la izquierda como haga falta.
data NUMEROS;
format num best12.;
informat num best12.;
input num;
datalines;
646543589
9684634311
654634
6354
1
run;
data NUM_FORMAT;
set NUMEROS;
format cadena $10.;
cadena = put(num,z10.);
run;
Lo que hemos hecho para resolverlo es un casting del campo original. Con put()
le hemos aplicado un formato z10., que es el que se encarga de añadirle ceros por la izquierda. La salida de esto es una cadena de texto, ya que si almacenamos un número, los ceros por la izquierda se perderán.
Añadir ceros por la izquierda a una cadena de texto
En caso de que partamos de una cadena de texto hay varias soluciones posibles, si bien, alguna de ellos no es válida si tenemos caracteres alfanuméricos en la cadena origen. Incluyo algunas en el siguiente código incluyéndolas como distintos campo de la tabla de salida:
data CADENAS;
format char $10.;
informat char $10.;
input char;
datalines;
615546241
A165432113
135485
A
run;
data CHAR_FORMAT;
set CADENAS;
format cadena1 cadena2 $10.;
cadena1 = compress(repeat('0',9 - length(char))||char);
cadena2 = put(input(char,best12.),z10.);
run;
La primera solución utiliza la función repeat()
que incluye tantos caracteres, ‘0’ en este caso, como se le indique. Aquí se da una particularidad que no es común en SAS: si se indica 2 se añadirán 3 ceros, por lo que hay que restar 1 a la cantidad de caracteres que queremos añadir. Por ello, el segundo parámetro de repeat()
está calculado como 9 (en vez de 10) menos la longitud original de la cadena. Concatenando la salida del repeat()
a la cadena original tendremos lo que estamos buscando.
Otra opción es una solución menos general porque solo es válida si la cadena de entrada está formada solo por números. Esto es porque lo que haremos será reformatear la cadena de texto primero como número (formato best12.) para luego convertirla de nuevo en texto con el formato z10. que es el que vimos que se encarga de añadir ceros por la izquierda a números. Tenemos que usar una combinación de put()
e input()
ya que cada uno de ellos acepta números o cadenas de texto respectivamente.
