es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

SAS dividir macro cadena con delimitador

Me gustaría dar nombres adecuados a las variables en una macro de SAS, sin embargo, obtengo un mensaje de error o solo obtengo la primera letra de la cadena. Aquí hay un ejemplo utilizando los siguientes códigos de SAS:

data trial;
  %let cate=gender age;
  %let label="Gender*Age at dx";

    do i=1 to countw("%str(&cate)");
      item=scan("%str(&cate)",i); 
      print=scan(%str(&label),i,*);
      output;
   end;
run;

Obtengo el siguiente error:

ERROR 386-185: Se espera una expresión aritmética.
25385        print=scan(%str(&label),i,*);

ERROR 200-322: El símbolo no es reconocido y será ignorado.

ERROR 76-322: Error de sintaxis, la instrucción será ignorada.

Si cambio los códigos de la siguiente manera:

data trial;
  %let cate=gender age;
  %let label="Gender*Age at dx";

    do i=1 to countw("&cate");
      item=scan("&cate",i); 
      print=scan(%str(&label),i);
      output;
   end;
run;

Obtengo print=Age en lugar de print='Age at dx'. ¿Algún consejo al respecto? ¡Gracias!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para dar nombres adecuados a las variables en una macro de SAS, se puede utilizar la función %str para encerrar el nombre de la variable entre comillas. En el ejemplo proporcionado, la función %str se utiliza solo para encerrar la variable “label”, pero también se debería utilizar para la variable “cate”, de la siguiente manera:

    data trial; 
    %let cate=%str("gender age");
    %let label=%str("Gender*Age at dx");
    do i=1 to countw(&cate);  
    item=scan(&cate,i);
    print=scan(&label,i,"*");
    output;
    end;
    run;
    

    Esto te debería dar los resultados deseados. Al utilizar la función %str, las variables están correctamente encerradas entre comillas, lo que permite que la función scan las interprete correctamente.

Comments are closed.