Dividir en palabras un texto con SAS

12 Sep

Una duda que planteó una lectora del blog acerca de separar una cadena de caracteres separados por comas y crear observaciones en otra variable:
 Hola! he buscado por toda la página, necesito ayuda urgente. Mi problema es el siguiente.

Necesito separar una cadena de texto en una fila en varias filas, por ejemplo

cadena1,cadena2,cadena3

en

cadena1
cadena2
cadena3

para encontrar la ‘ , ‘ utilizo scan, aunque podría ocupar anypunct para que encuentre la primera ‘ , ‘ luego la segunda ‘ , ‘ etc y cortar con substr, longth … pero bueno, ya que tengo un metodo de separar el texto de la fila como hago para que cada palabra este en una nueva fila? ojala me hayan entendido y me den una idea de como hacer eso en un proc sql, con una macro o como sea, solo una pequeña orientación me serviria mucho, gracias!!!!!

En realidad teníamos una entrada que podía haberte servido de referencia:

https://analisisydecision.es/el-debate-politico-o-como-analizar-textos-con-wps/

Con esta idea podemos proponer hacer:

data frase;
frase = "cadena1,cadena2,cadena3";
run;

data palabras;
set frase end=fin;
drop i letra;
length palabra $50;
palabra="";
do i = 1 to length(frase);
letra=substr(frase,i,1);
if letra not in (",") then palabra=compress(palabra||letra);
else do;
output;
palabra="";
end;end;
if fin then output;
run;

Se trata de ir caracter a caracter y volcarlo a una nueva variable en el momento que encuentra la coma y realizar un output en ese momento. Saludos.

4 respuestas a «Dividir en palabras un texto con SAS»

  1. Una alternativa es la siguiente:

    data palabras(keep=palabra frase);
    set frase;
    length palabra $50;
    palabra=»Test»;
    do while (palabra NE «»); i+1;
    palabra=scanq(frase,i,»,»);
    if palabra NE «» then output;
    end;
    run;

    Abreviado es :
    1. extraer la palabra1 (la que sea) que este en una frase en la posicion 1 entre el delimitador «,»
    2. extraer la palabra2 que esté en la posicion 2 ….
    3.extraer la palabra3 …..

    hasta que nos devuelva que no hay mas palabras…

    Saludos

  2. Gracias por la explicacion, pero cuando correo esta funcion la ultima palara del texto no me la esta poniendo. me podrian ayudarme a indicar porque.

  3. Buenas tardes,
    necesito hacer una comparacion numerica de macros y recojo un valor númerico de una tabla y asi poder compararlo, donde utilizo, call symput( ‘importe’, Imp_Porp); call symput( ‘importe2’, Imp_Porp2);
    y comparo los dos valores %IF &importe. >&importe2 %then %do;
    Data…..
    Run;
    %end;
    Pero como el call symput me lo convierte a cararte no me lo hace bien, como lo podria hacer de forma correcta, es decir, convertir a número o una funcion semejante a call symput pero para datos númericos?
    Muchas gracias

  4. Hola La solución que plantean me sirvió mucho, pero ahora preciso que los campos que se separan por las comas (,) queden en una misma fila. Como hago eso?
    Gracias!

Deja una respuesta

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