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: , , ,

  1. 12 Respuestas en “Macros SAS. Calular la longitud de un número.”

  2. 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

  3. Por regina, Nov 18, 2009 | Responder

    Perdon, era ¿como separo los datos que tienen 12 caracteres de los de 13?

    GRacias

  4. 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.

  5. 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

  6. Por regina, Nov 18, 2009 | Responder

    Mi variable es alfanumerica del modo $13. eso no cambia la manera de meter las instrucciones?

    Mil gracias

  7. 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

  8. 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;

  9. 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.

  10. Por alfredo, Nov 19, 2009 | Responder

    Muchas gracias saludos

  11. Por alfredo, Nov 19, 2009 | Responder

    Otra pregunta con proc means ¿comole haría?

  12. 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

  13. Por daniel, Feb 9, 2011 | Responder

    ensenameel numero y la longitud

Publica un Comentario