BookmarkSubscribeRSS Feed
LeoGaber
Fluorite | Level 6

Buenas tardes Comunidad¡¡¡ Como les va?

Necesito consultarles, como pueden dividir el contenido de una columna en SAS de la manera que lo hacemos en excel?

Ya no quiero exportar mas las tablas de una app a la otra para poder hacerlo, demora demasiado. Saben como poder realizarlo desde SAS Enterprise Guide?

 

Muchas gracias A todos!

4 REPLIES 4
AndreaNG
SAS Employee

¡Se puede hacer!

En el caso de tener un delimitador en tus datos puedes utilizar la función "SCAN()", aquí tienes un ejemplo de como utilizarlo:

data personas;
	infile datalines delimiter=',';
	length nombre $16 direccion $40;
	input nombre$ direccion$;
	datalines;
Andrea Gonzalez,Reforma 505 | Cuautemoc | CDMX
Ximena Perez, Duraznos 35 | Naucalpan | EDOMEX
;
run;

Data personas_scan;
	set personas;
	Calle=Scan(direccion,1,'|');
	Delegacion_Municipio=Scan(direccion,2,'|');
	Estado=Scan(direccion,3,'|');
	drop direccion;
run;
imejias
Calcite | Level 5

Hola, 

 

Por favor, me pueden ayudar, si hay separadores juntos (||), es decir un dato viene en blanco, scan()no lo toma, por ejemplo:

 

Mexico||cuauhtemoc|roma|06720, sólo deja en la tabla 

campo1    campo2                campo3    campo4    campo5 (vacio)

Mexico     cuauhtemoc       roma         06720        

 

Si viene con dato, si lo toma:

Mexico|CDMX|cuauhtemoc|roma|06720

sólo deja en la tabla:

campo1    campo2                campo3                campo4    campo5

Mexico     CDMX                  cuauhtemoc       roma           06720        

 

Es posible evitar este comportamiento???

 

Mil gracias!

pcovian
Fluorite | Level 6

Espero te ayude, ya que muchas veces he tenido que construir variable por variable a partir de una cadena de texto.

EL primer paso data es solo para crear un dataset que tiene las dos cadenas que pones como ejemplo, el código que te podría ayudar es el segundo paso data

 

LIBNAME LIBEJEM 'aqui va la ruta o direccion donde estan los datasets';RUN;
 
DATA LIBEJEM.B_DATOS;
INPUT VARIABLE :$100.;
DATALINES;
Mexico||cuauhtemoc|roma|06720
Mexico|CDMX|cuauhtemoc|roma|06720
;
RUN;
 
DATA LIBEJEM.B_TABLA1(KEEP= VAR1 VAR2 VAR3 VAR4 VAR5);
SET LIBEJEM.B_DATOS;
 
LARGO = LENGTH(VARIABLE);
ARRAY VARIABLES{5} $ VAR1-VAR5;
 
I = 1;
DO J = 1 TO LARGO;
CARACTER = SUBSTR(VARIABLE,J,1);
IF CARACTER = '|' THEN DO;
I = I + 1;
END;
ELSE DO;
VARIABLES{I} = CATS(VARIABLES{I}, CARACTER);
IF J = LARGO THEN DO;
I = I + 1;
END;
END;
END;
 
RUN;
 
 
sardav
SAS Employee

Hola LeoGaber!

Perdón pero no termino de entender qué significa "dividir el contenido de una columna en SAS de la manera que lo hacemos en excel".

A qué te refieres? Si nos pasas un pequeño ejemplo te podemos ayudar.

Me quedo por acá a la espera...

hackathon24-white-horiz.png

The 2025 SAS Hackathon Kicks Off on June 11!

Watch the live Hackathon Kickoff to get all the essential information about the SAS Hackathon—including how to join, how to participate, and expert tips for success.

YouTube LinkedIn

Discussion stats
  • 4 replies
  • 4631 views
  • 10 likes
  • 5 in conversation