Forum en español

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

sas-innovate-white.png

Our biggest data and AI event of the year.

Don’t miss the livestream kicking off May 7. It’s free. It’s easy. And it’s the best seat in the house.

Join us virtually with our complimentary SAS Innovate Digital Pass. Watch live or on-demand in multiple languages, with translations available to help you get the most out of every session.

 

Register now!

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