Ha llegado hoy una búsqueda que no ha permanecido en AyD ni 20 segundos. Quería calcular la longitud de un número con SAS. Como yo estoy aquí para compartir mis conocimientos y hay una persona que los necesita aquí está esta macro que espero o sea de utilidad:
%macro largo(num);
length(compress(put(&num.,32.)))
%mend;
Esta macro recibe un parámetro que ha de ser un número y lo que hace es transformarlo a carácter comprimido y calcular su longitud. Veamos ejemplos de uso:
data uno;
input x;
datalines;
1234
12345
123456
1234567
12345678
1
12
123456789
1234567890
;
run;
data uno;
set uno;
y=%largo(x);
*NOS QUEDAMOS CON LA PRIMERA CIFRA;
z=int(x/(10**(%largo(x)-1)));
run;
proc print;
run;
Con este ejemplo vemos perfectamente su funcionamiento, además puede ir en operaciones matemáticas como el ejemplo en el que se queda con la primera cifra de un número. Espero que sea de utilidad y como siempre si tenéis dudas, sugerencias o un trabajo con un horario inferior o igual a 40 horas semanales reales podéis contactar conmigo en rvaquerizo@analisisydecision.es
tengo una base de datos con una variable que tiene 13 y 12 caracteres, ¿Como le hago para separar los datos que tienen 12 variables de los que tienen 13 variables?
Gracias
Perdon, era ¿como separo los datos que tienen 12 caracteres de los de 13?
GRacias
Hola, length(varriable_numerica) es la función que debes emplear:
variable_12=»»;
variable_13=»»;
error=0;
if length(var)=12 then variable_12=var;
else if length(var)=13 then variable_13=var;
else error=1;
Saludos.
esto me ayudo gracias!
disculpe es que soy nueva en este programa y no le entinedo muy bien despues de variable_12= «»; eso que es??? y también antes del else donde dice var es igual el nombre de mi variable?
Gracias y perdon por tanta lata
Mi variable es alfanumerica del modo $13. eso no cambia la manera de meter las instrucciones?
Mil gracias
Buenas tardes, una pregunta tengo una base de datos donde viene una variable que son los trabajadores de la empresa, otra que es el nombre de la empresa (la cual se repite por cada trabajador)y el ingreso, tengo que sacar las 10 empresas que tienen los mayores ingresos y ver cuantos trabajadores esas empresas como lo puedo hacer?
Gracias y saludos
Hola alfredo. Lo que tienes que hacer es un PROC MEANS/SUMMARY o SQL y sacar los datos sumarizados por empresa. Luego ordenas descendientemente por el dato del que quieres hacer un ranking y ya lo tienes.
Ejemplo con proc sql:
proc sql;
create table empresas as select
empresa, sum(importe) as importe
from tabla
group by 1;
quit;
proc sort data=empresas; by descending importe; quit;
Regina, aunque la longitud de tu campo sea 13 con length lo que haces es calcular la longitud de tu campo.
Muchas gracias saludos
Otra pregunta con proc means ¿comole haría?
Es que de mi base de datos la variable de empresas viene repetida por cada trabajador entonces no se como sacar cuantas empresas hay en total
Tambien soy, nuevo en este programa sino es mucha molestia me podría poner todos los pasos por favor
ensenameel numero y la longitud
Hola como puedo rellenar un campo con ceros a la izquierda con longitud a 19 caracteres??
Usa la función compress. Por ejemplo, llamemos a tu campo CAMPO1 y a tu data TABLA y necesitas tener un CAMPO2 de 19 caracteres con CEROS a la izquierda:
DATA tabla1;
SET tabla;
largo=lenght(campo1);
if largo = 1; then CAMPO2=compress(‘000000000000000000’,CAMPO1),»);
if largo = 2; then CAMPO2=compress(‘00000000000000000’,CAMPO1,»);
if largo= 3; then CAMPO2 =compress(‘0000000000000000’,CAMPO1,»);
.
.
.
if largo=18; then CAMPO2=compress(‘0’,CAMPO1,»);
ig largo=19; then CAMPO2=CAMPO1;
run;
Espero que te sirva!
Tengo un campo truncado:
NOMBRE (Original): Arman
NOMBRE (Esperado): Armando
Cómo hago para reparar el campo? Traté de hacerlo así:
data PRUEBA;
set PRUEBA;
format NOMBRE $20.;
run;
Y sí se aumentó el tamaño del campo, pero en su contenido sigo viendo ‘Arman’
Me ayudan? Mil gracias!!
a mi me pasa lo mismo, no me aparece la cantidad de datos, que contiene el campo!
NOMBRE (Original): Arman
NOMBRE (Esperado): Armando
pero al exportar o al hacer doble click sobre la celda, aparece el total..como hago para que me muestre todos los datos?
yo le estoy dando en el ejemplo así tal cual y no me bota un resultado, como hago para qme salga la respuesta?
Tambien tengo otra pregunta, tengo que hacer un campo, donde tengo valores, y necesito que SIEMPRE queden del mismo largo todos, pero incluyendo espacios.
Es decir, tengo numeros, por ejemplo «10798987978» y necesito que quede de largo 50, pero añadiendo espacios, y que los espacios queden al exportar el archivo en un excel ojala, como hago?
Gracias!