Macros SAS. Calular la longitud de un número.

27 Oct

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

18 respuestas a «Macros SAS. Calular la longitud de un número.»

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

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

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

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

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

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

    • 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!

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

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *