Macros SAS. Calular la longitud de un número.
Octubre 27th, 2009 | por rvaquerizo |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
Etiquetas: compress, funciones de texto SAS, length, macros SAS

12 Respuestas en “Macros SAS. Calular la longitud de un número.”
Por regina, Nov 18, 2009 | Responder
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
Por regina, Nov 18, 2009 | Responder
Perdon, era ¿como separo los datos que tienen 12 caracteres de los de 13?
GRacias
Por rvaquerizo, Nov 18, 2009 | Responder
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.
Por regina, Nov 18, 2009 | Responder
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
Por regina, Nov 18, 2009 | Responder
Mi variable es alfanumerica del modo $13. eso no cambia la manera de meter las instrucciones?
Mil gracias
Por alfredo, Nov 18, 2009 | Responder
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
Por rvaquerizo, Nov 19, 2009 | Responder
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;
Por rvaquerizo, Nov 19, 2009 | Responder
Regina, aunque la longitud de tu campo sea 13 con length lo que haces es calcular la longitud de tu campo.
Por alfredo, Nov 19, 2009 | Responder
Muchas gracias saludos
Por alfredo, Nov 19, 2009 | Responder
Otra pregunta con proc means ¿comole haría?
Por alfredo, Nov 19, 2009 | Responder
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
Por daniel, Feb 9, 2011 | Responder
ensenameel numero y la longitud