Importación de Excel a SAS
Resuelto
grhelene
Mensajes publicados
6
Estado
Miembro
-
max75010 -
max75010 -
Hola,
Me gustaría importar una tabla de Excel a SAS, lo logro hacer pero tengo una variable que contiene comas y eso perturba a SAS, importa las comas pero no en la posición correcta dentro del número, por ejemplo:
excel sas
0,50 50
1,11 111
13,36 1,336
ya intenté cambiar el formato en Excel, pasar por un archivo .txt,... en vano.
si alguien puede ayudarme sería muy amable.
gracias
Me gustaría importar una tabla de Excel a SAS, lo logro hacer pero tengo una variable que contiene comas y eso perturba a SAS, importa las comas pero no en la posición correcta dentro del número, por ejemplo:
excel sas
0,50 50
1,11 111
13,36 1,336
ya intenté cambiar el formato en Excel, pasar por un archivo .txt,... en vano.
si alguien puede ayudarme sería muy amable.
gracias
Configuración: Windows 2000 Internet Explorer 6.0
23 respuestas
- 1
- 2
Siguiente
Hola,
Respecto a los errores de enlace de Excel, además de algunos problemas ya mencionados por otros usuarios más arriba, en mi caso se debe a la ausencia del módulo "SAS access to pc files". Para saber si lo tienes, debes ejecutar la siguiente instrucción en una hoja de programa:
proc setinit;
run;
Este programa lista todos los módulos que tienes alquilados.
Como no tengo ese módulo, paso a la instrucción siguiente para importar una tabla de Excel, aunque resulta algo engorroso:
data x.toto;
infile 'Z:\Etudes\Orientation\table_sas_X2\tutu_2004_partie1.csv' dlm=';' dsd truncover firstobs=2;
/*la ruta de acceso donde se encuentra tu archivo Excel, previamente guardado en formato CSV con como delimitador de campos el ';'*/
input /*instrucción que construye tu tabla en SAS. cada variable tiene su nombre y su longitud y tipo definidos, en el orden en que aparecen en tu archivo CSV. Esto supone haber verificado previamente el contenido (numérico o alfabético) y la longitud de cada variable (para evitar recortes)*/
ident:4.
sexe:$1.
MN:$25.
AN:4.
DS2:$25.
GRAGE:$1.
CS2:$1.
CS23:$1.
Q1:$1.
Q1_8:$25.
Q2m:$2.
Q2j:$2.
Q2_nsp:$4.
Q2_NR:$1.
Q3:2.
Q4:$1.
Q5:$1.
Q6:$1.
Q7:$1.
Q73:$2.;
run;
Bonne courage
Respecto a los errores de enlace de Excel, además de algunos problemas ya mencionados por otros usuarios más arriba, en mi caso se debe a la ausencia del módulo "SAS access to pc files". Para saber si lo tienes, debes ejecutar la siguiente instrucción en una hoja de programa:
proc setinit;
run;
Este programa lista todos los módulos que tienes alquilados.
Como no tengo ese módulo, paso a la instrucción siguiente para importar una tabla de Excel, aunque resulta algo engorroso:
data x.toto;
infile 'Z:\Etudes\Orientation\table_sas_X2\tutu_2004_partie1.csv' dlm=';' dsd truncover firstobs=2;
/*la ruta de acceso donde se encuentra tu archivo Excel, previamente guardado en formato CSV con como delimitador de campos el ';'*/
input /*instrucción que construye tu tabla en SAS. cada variable tiene su nombre y su longitud y tipo definidos, en el orden en que aparecen en tu archivo CSV. Esto supone haber verificado previamente el contenido (numérico o alfabético) y la longitud de cada variable (para evitar recortes)*/
ident:4.
sexe:$1.
MN:$25.
AN:4.
DS2:$25.
GRAGE:$1.
CS2:$1.
CS23:$1.
Q1:$1.
Q1_8:$25.
Q2m:$2.
Q2j:$2.
Q2_nsp:$4.
Q2_NR:$1.
Q3:2.
Q4:$1.
Q5:$1.
Q6:$1.
Q7:$1.
Q73:$2.;
run;
Bonne courage
Hola,
¿Cómo importas tus archivos Excel?
Prueba esto:
-> Convierte tus archivos fuente Excel a CSV
-> Adapta este código:
proc import datafile="ruta del archivo\nnombre del archivo.csv"
out=mydata
dbms=dlm
replace;
delimiter=';'; /* CSV delimitado por ';' prueba ',' si no funciona */
getnames=yes;
run;
¡Mucho ánimo!,
Steel
--
- ¿No viste a Chloraine?
- ¿Quién es Chloraine? - ¡Ajá Ajá Ajá!
¿Cómo importas tus archivos Excel?
Prueba esto:
-> Convierte tus archivos fuente Excel a CSV
-> Adapta este código:
proc import datafile="ruta del archivo\nnombre del archivo.csv"
out=mydata
dbms=dlm
replace;
delimiter=';'; /* CSV delimitado por ';' prueba ',' si no funciona */
getnames=yes;
run;
¡Mucho ánimo!,
Steel
--
- ¿No viste a Chloraine?
- ¿Quién es Chloraine? - ¡Ajá Ajá Ajá!
Hola,
Muchas gracias por vuestra respuesta.
De hecho, importaba directamente mi archivo xls en SAS.
He aplicado tu sugerencia convirtiendo mi archivo xls a csv. aparentemente parece que puede leer algo (todavía no es eso, pero al menos me dice que hay datos en la columna). Ahora, solo falta que consiga indicarle cómo leer los datos que recupera ^-^.
En cualquier caso, muchas gracias por vuestra ayuda.
Muchas gracias por vuestra respuesta.
De hecho, importaba directamente mi archivo xls en SAS.
He aplicado tu sugerencia convirtiendo mi archivo xls a csv. aparentemente parece que puede leer algo (todavía no es eso, pero al menos me dice que hay datos en la columna). Ahora, solo falta que consiga indicarle cómo leer los datos que recupera ^-^.
En cualquier caso, muchas gracias por vuestra ayuda.
Hola,
veo que aquí todo el mundo usa la proc import.
Personalmente no me gusta nada y mucha gente recomienda pasar por archivos csv. lo cual es un buen comienzo. aún mejor si se usa un INFILE
Si como yo, prefieren usar directamente el archivo de Excel en su estado original (Dios sabe que es engorroso tener que volver a trabajar los archivos fuente uno por uno) recomiendo las conexiones DDE.
En gros el programa SAS va a abrir Excel y recuperar todas las celdas que le indiquen recuperar en el formato que elijan, aquí va un ejemplo:
options noxwait noxsync;
x 'D:\excel.exe'; /* LA RUTA DE ACCESO DEBE MODIFICARSE */
data _null_;
sleep=mcipislp(3);
run;
filename cmds dde 'excel|system';
data _null_;
file cmds;
put '[open("D:\PT_CODE.xls")]'; /*Indicar la ruta completa y el nombre del archivo */
run;
filename test dde 'excel|Fusion_crash ! r2c1:r38c3' lrecl=2000;
/* Fusion_crash a modificar por el nombre de la hoja
r2c1:r38c3 : el rango de celdas a recuperar aquí 36 filas y 3 columnas
Lrecl si omitido por defecto 255 modificarlo si la longitud del registro es insuficiente */
data z.missing_codes; /* Nombre de la tabla */
attrib
Old_Country_name length=$250 /* Atribuir las variables y su longitud */
Country_name length=$250
Country_cd length=$3
;
infile test dlm='09'x notab dsd truncover pad;
input
Old_Country_name $
Country_name $
Country_cd $
;
run;
filename cmds dde 'excel|system';
data _null_; /* Para cerrar Excel */
file cmds;
put '[quit()]';
run;
Es totalmente posible convertirlo en una macro para importar varios archivos.
Los put permiten comandar Excel desde SAS usando el lenguaje X4ML (Excel 4) y permiten automatizar el formateo de hojas si las celdas están fusionadas por ejemplo.
si necesitan pueden pedir una macro de importación en bucle.
mucho ánimo
veo que aquí todo el mundo usa la proc import.
Personalmente no me gusta nada y mucha gente recomienda pasar por archivos csv. lo cual es un buen comienzo. aún mejor si se usa un INFILE
Si como yo, prefieren usar directamente el archivo de Excel en su estado original (Dios sabe que es engorroso tener que volver a trabajar los archivos fuente uno por uno) recomiendo las conexiones DDE.
En gros el programa SAS va a abrir Excel y recuperar todas las celdas que le indiquen recuperar en el formato que elijan, aquí va un ejemplo:
options noxwait noxsync;
x 'D:\excel.exe'; /* LA RUTA DE ACCESO DEBE MODIFICARSE */
data _null_;
sleep=mcipislp(3);
run;
filename cmds dde 'excel|system';
data _null_;
file cmds;
put '[open("D:\PT_CODE.xls")]'; /*Indicar la ruta completa y el nombre del archivo */
run;
filename test dde 'excel|Fusion_crash ! r2c1:r38c3' lrecl=2000;
/* Fusion_crash a modificar por el nombre de la hoja
r2c1:r38c3 : el rango de celdas a recuperar aquí 36 filas y 3 columnas
Lrecl si omitido por defecto 255 modificarlo si la longitud del registro es insuficiente */
data z.missing_codes; /* Nombre de la tabla */
attrib
Old_Country_name length=$250 /* Atribuir las variables y su longitud */
Country_name length=$250
Country_cd length=$3
;
infile test dlm='09'x notab dsd truncover pad;
input
Old_Country_name $
Country_name $
Country_cd $
;
run;
filename cmds dde 'excel|system';
data _null_; /* Para cerrar Excel */
file cmds;
put '[quit()]';
run;
Es totalmente posible convertirlo en una macro para importar varios archivos.
Los put permiten comandar Excel desde SAS usando el lenguaje X4ML (Excel 4) y permiten automatizar el formateo de hojas si las celdas están fusionadas por ejemplo.
si necesitan pueden pedir una macro de importación en bucle.
mucho ánimo
Gracias por tu respuesta, pero no puedo guardar en .csv con la opción de las ' " ', solo con la opción ';'.
Hola,
Actualmente estoy programando consultas estadísticas en SAS a partir de archivos fuente en EXCEL...(soy principiante en SAS y en programación)
Mi problema es que cuando importo mi archivo EXCEL en SAS, todas las columnas que quiero obtener lo están, excepto la columna donde se encuentran las fechas.
Hice 2 pruebas con dos archivos fuente construidos con el mismo modelo pero en periodos diferentes.
- archivo 1: no hay problema, obtengo todo correctamente.
- archivo 2: las fechas no se recuperan para nada en SAS.
Para ambos archivos, la columna empieza por celdas vacías (=> para SAS el contenido de la celda es texto => procesamiento posterior para transcribir el texto en fecha SAS...)
No entiendo entonces por qué en un caso, antes del procesamiento del archivo, recupero mis datos y en el otro SAS considera que la columna está vacía...
¿Podrían ayudarme, por favor?
Gracias de antemano.
Actualmente estoy programando consultas estadísticas en SAS a partir de archivos fuente en EXCEL...(soy principiante en SAS y en programación)
Mi problema es que cuando importo mi archivo EXCEL en SAS, todas las columnas que quiero obtener lo están, excepto la columna donde se encuentran las fechas.
Hice 2 pruebas con dos archivos fuente construidos con el mismo modelo pero en periodos diferentes.
- archivo 1: no hay problema, obtengo todo correctamente.
- archivo 2: las fechas no se recuperan para nada en SAS.
Para ambos archivos, la columna empieza por celdas vacías (=> para SAS el contenido de la celda es texto => procesamiento posterior para transcribir el texto en fecha SAS...)
No entiendo entonces por qué en un caso, antes del procesamiento del archivo, recupero mis datos y en el otro SAS considera que la columna está vacía...
¿Podrían ayudarme, por favor?
Gracias de antemano.
Hola,
Gracias por vuestra ayuda.
Intente, pero no hubo forma. ¿Podéis darme un vistazo, por favor, tomando este ejemplo?
Gracias de nuevo por vuestra ayuda
Gracias por vuestra ayuda.
Intente, pero no hubo forma. ¿Podéis darme un vistazo, por favor, tomando este ejemplo?
Gracias de nuevo por vuestra ayuda
Hola,
No puedo convertir una tabla de Excel a SAS.
¿Puedo enviarte un pequeño archivo de Excel para ver qué sale al transformar en SAS?
No puedo enviarlo por el foro.
Gracias por tu ayuda.
No puedo convertir una tabla de Excel a SAS.
¿Puedo enviarte un pequeño archivo de Excel para ver qué sale al transformar en SAS?
No puedo enviarlo por el foro.
Gracias por tu ayuda.
Vérifier vos logs (journaux) et si vous n’arrivez toujours pas postez ici le contenu.
Essayez de comprendre l’erreur, car je ne peux pas faire vos tâches à votre place
à changer en GRAS
options noxwait noxsync;
x 'D:\excel.exe'; /* LE CHEMIN D'ACCES EST à MODIFIER par l'emplacement de votre votre exécutable excel (c:/program files etc...) c'est le chemin que sas doit suivre pour ouvrir Excel*/
data _null_;
sleep=mcipislp(3);
run;
filename cmds dde 'excel|system'; /* NE rien changer */
data _null_;
file cmds;
put '[open("D:\PT_CODE.xls")]'; /*Indiquer le chemin complet et le nom du fichier que vous souhaitez importer si SAS ne le trouve un message apparaitra dans le log et la message box de excel comme quoi le fichier n'existe pas */
run;
filename test dde 'excel|Fusion_crash ! r2c1:r38c3' lrecl=2000;
/* "Fusion_crash" est à modifier par le nom de la feuille si vous ne l'avez pas renomé ce sera bien souvent ("feuille1" ou "sheet1")
r2c1:r38c3 : la plage de cellules à récupérer r pour row, c pour column , bien penser à ne pas oublier le ' juste après le 3 dan l'exemple
Lrecl si omis par défaut 256 le modifier si la longeur de l'enregistrement dans votre cellule excel est supérieur */
data z.missing_codes; /* Nom de la table ici z , ne pas oublier d'alouer la librairie sinon l'importer dans work */
attrib
Old_Country_name length=$250 /* Attribuer les variables et leur longeur personnellement j'importe toutes les variables en numérique avec cette méthode celà préviens les problèmes de reconnaissance des format excel par sas ensuite je réalise une étape data pour convertir les éspéces ou les virgules afin de pouvoir changer des variables textes en numérique*/
Country_name length=$250
Country_cd length=$3 ;
infile test dlm='09'x notab dsd truncover pad; /* NE RIEN CHANGER */
input
Old_Country_name $
Country_name $
Country_cd $ /*REPRENDRE LES NOM DE VARIABLES PRECEDEMENT ATTRIBUER */
;
run;
filename cmds dde 'excel|system'; /* NE RIEN CHANGER */
data _null_; /*NE RIEN CHANGER Pour refermer Excel */
file cmds;
put '[quit()]';
run;
Essayez de comprendre l’erreur, car je ne peux pas faire vos tâches à votre place
à changer en GRAS
options noxwait noxsync;
x 'D:\excel.exe'; /* LE CHEMIN D'ACCES EST à MODIFIER par l'emplacement de votre votre exécutable excel (c:/program files etc...) c'est le chemin que sas doit suivre pour ouvrir Excel*/
data _null_;
sleep=mcipislp(3);
run;
filename cmds dde 'excel|system'; /* NE rien changer */
data _null_;
file cmds;
put '[open("D:\PT_CODE.xls")]'; /*Indiquer le chemin complet et le nom du fichier que vous souhaitez importer si SAS ne le trouve un message apparaitra dans le log et la message box de excel comme quoi le fichier n'existe pas */
run;
filename test dde 'excel|Fusion_crash ! r2c1:r38c3' lrecl=2000;
/* "Fusion_crash" est à modifier par le nom de la feuille si vous ne l'avez pas renomé ce sera bien souvent ("feuille1" ou "sheet1")
r2c1:r38c3 : la plage de cellules à récupérer r pour row, c pour column , bien penser à ne pas oublier le ' juste après le 3 dan l'exemple
Lrecl si omis par défaut 256 le modifier si la longeur de l'enregistrement dans votre cellule excel est supérieur */
data z.missing_codes; /* Nom de la table ici z , ne pas oublier d'alouer la librairie sinon l'importer dans work */
attrib
Old_Country_name length=$250 /* Attribuer les variables et leur longeur personnellement j'importe toutes les variables en numérique avec cette méthode celà préviens les problèmes de reconnaissance des format excel par sas ensuite je réalise une étape data pour convertir les éspéces ou les virgules afin de pouvoir changer des variables textes en numérique*/
Country_name length=$250
Country_cd length=$3 ;
infile test dlm='09'x notab dsd truncover pad; /* NE RIEN CHANGER */
input
Old_Country_name $
Country_name $
Country_cd $ /*REPRENDRE LES NOM DE VARIABLES PRECEDEMENT ATTRIBUER */
;
run;
filename cmds dde 'excel|system'; /* NE RIEN CHANGER */
data _null_; /*NE RIEN CHANGER Pour refermer Excel */
file cmds;
put '[quit()]';
run;
Hola señor,
disculpe contactarlo de esta manera.
En efecto, intenté adaptar su programa de importación de archivos Excel en SAS, pero durante la ejecución obtengo este mensaje:
archivo Excel|system no existe .
y además, me gustaría saber si la ubicación del ejecutable de Excel es la misma que la ubicación de Excel
¿podría ayudarme a resolver este problema?
disculpe contactarlo de esta manera.
En efecto, intenté adaptar su programa de importación de archivos Excel en SAS, pero durante la ejecución obtengo este mensaje:
archivo Excel|system no existe .
y además, me gustaría saber si la ubicación del ejecutable de Excel es la misma que la ubicación de Excel
¿podría ayudarme a resolver este problema?
Hola,
Veo que hay muchas personas que conocen SAS y Excel en esta discusión...
Justamente tengo un problema con Excel y SAS:
Estoy usando archivos de Excel para ingresar datos en SAS; al importar, encuentro ciertos problemas.
Aquí está el proceso detallado que utilizo:
1. los archivos de Excel contienen datos en columnas
2. guardamos los archivos de Excel en formato CSV
3. los archivos CSV se importan en SAS
Durante la fase 3, obtenemos resultados extraños debido a un problema en la fase 2:
- si tenemos 5 columnas en Excel, a veces encontramos un pequeño cuadrado en SAS en la 5ª columna
- a veces, encontramos este pequeño cuadrado en SAS en la 3ª o 4ª columna
Estos cuadrados se deben a la ausencia de un ';' al final de una línea en el archivo CSV.
Mi pregunta es: ¿cómo evitar estos cuadrados sin añadir una columna innecesaria en mi archivo de Excel?
Gracias de antemano, y perdón por contaminar esta discusión con otro tema!
¡Gracias!
Veo que hay muchas personas que conocen SAS y Excel en esta discusión...
Justamente tengo un problema con Excel y SAS:
Estoy usando archivos de Excel para ingresar datos en SAS; al importar, encuentro ciertos problemas.
Aquí está el proceso detallado que utilizo:
1. los archivos de Excel contienen datos en columnas
2. guardamos los archivos de Excel en formato CSV
3. los archivos CSV se importan en SAS
Durante la fase 3, obtenemos resultados extraños debido a un problema en la fase 2:
- si tenemos 5 columnas en Excel, a veces encontramos un pequeño cuadrado en SAS en la 5ª columna
- a veces, encontramos este pequeño cuadrado en SAS en la 3ª o 4ª columna
Estos cuadrados se deben a la ausencia de un ';' al final de una línea en el archivo CSV.
Mi pregunta es: ¿cómo evitar estos cuadrados sin añadir una columna innecesaria en mi archivo de Excel?
Gracias de antemano, y perdón por contaminar esta discusión con otro tema!
¡Gracias!
SI detallaras el programa que utilizas para el pequeño 3 podría ser útil.
¿Qué haces? ¿pasas por el wizard?
Si deseas recuperar documentos csv te aconsejo pasar por una etapa de datos utilizando el infile.
¿Estás seguro de que en algunas líneas falta ese separador? en ese caso las opciones truncover y @@ permiten con el infile detectar los valores faltantes y evitar hacer lecturas a la siguiente línea (sas pensando que encontrará el contenido de la 5ª columna en la primera de la línea siguiente)
Pero tu problema me hace pensar en caracteres especiales que SAS no reconocerían, lo que puede provenir de la etapa 2.
Y dado que la etapa 2 puede ser la fuente de un error te aconsejaría la importación de archivos excel directamente con el pequeño programa anterior haciendo uso de los enlaces DDE
¿Qué haces? ¿pasas por el wizard?
Si deseas recuperar documentos csv te aconsejo pasar por una etapa de datos utilizando el infile.
¿Estás seguro de que en algunas líneas falta ese separador? en ese caso las opciones truncover y @@ permiten con el infile detectar los valores faltantes y evitar hacer lecturas a la siguiente línea (sas pensando que encontrará el contenido de la 5ª columna en la primera de la línea siguiente)
Pero tu problema me hace pensar en caracteres especiales que SAS no reconocerían, lo que puede provenir de la etapa 2.
Y dado que la etapa 2 puede ser la fuente de un error te aconsejaría la importación de archivos excel directamente con el pequeño programa anterior haciendo uso de los enlaces DDE
Hola,
Acabo de probar el programa que publicaste adaptándolo a mi archivo, pero obtengo un error (El archivo físico no existe, excel|system.) que no consigo resolver, ¿tal vez puedas ayudarme?
Gracias de antemano.
el programa adaptado :
options noxwait noxsync;
x 'C:\excel.exe'; /* LA RUTA DE ACCESO DEBE SER MODIFICADA por la ubicación de tu ejecutable de Excel (c:/program files etc...) es la ruta que SAS debe seguir para abrir Excel*/
data _null_;
sleep=mcipislp(3);
run;
filename cmds dde 'excel|system'; /* NO cambiar */
data _null_;
file cmds;
put '[open("C:\test_sas.xls")]'; /*Indicar la ruta completa y el nombre del archivo que deseas importar si SAS no lo encuentra aparecerá un mensaje en el log y la caja de mensaje de Excel indicando que el archivo no existe */
run;
filename test dde 'excel|feuil1 ! r1c1:r4c4' ;
/* "Fusion_crash" debe modificarse por el nombre de la hoja; si no lo has renombrado será a menudo ("feuille1" o "sheet1")
r2c1:r38c3 : el rango de celdas a recuperar r para fila, c para columna , acordarse de no olvidar el ' justo después del 3 en el ejemplo
Lrecl si se omite por defecto 256 cambiar si la longitud del registro en tu celda de Excel es mayor */
data lorraine; /* Nombre de la tabla aquí z , no olvidar asignar la librería si no, importar en work */
attrib
reg length=$5
dep length=$5
CG length=$5
LIBGEO length=$50 ;
infile test dlm='09'x notab dsd truncover pad; /* NO CAMBIAR NADA */
input
reg $
dep $
CG $
LIBGEO $
;
run;
filename cmds dde 'excel|system'; /* NO CAMBIAR */
data _null_; /* NO CAMBIAR Para cerrar Excel */
file cmds;
put '[quit()]';
run;
Acabo de probar el programa que publicaste adaptándolo a mi archivo, pero obtengo un error (El archivo físico no existe, excel|system.) que no consigo resolver, ¿tal vez puedas ayudarme?
Gracias de antemano.
el programa adaptado :
options noxwait noxsync;
x 'C:\excel.exe'; /* LA RUTA DE ACCESO DEBE SER MODIFICADA por la ubicación de tu ejecutable de Excel (c:/program files etc...) es la ruta que SAS debe seguir para abrir Excel*/
data _null_;
sleep=mcipislp(3);
run;
filename cmds dde 'excel|system'; /* NO cambiar */
data _null_;
file cmds;
put '[open("C:\test_sas.xls")]'; /*Indicar la ruta completa y el nombre del archivo que deseas importar si SAS no lo encuentra aparecerá un mensaje en el log y la caja de mensaje de Excel indicando que el archivo no existe */
run;
filename test dde 'excel|feuil1 ! r1c1:r4c4' ;
/* "Fusion_crash" debe modificarse por el nombre de la hoja; si no lo has renombrado será a menudo ("feuille1" o "sheet1")
r2c1:r38c3 : el rango de celdas a recuperar r para fila, c para columna , acordarse de no olvidar el ' justo después del 3 en el ejemplo
Lrecl si se omite por defecto 256 cambiar si la longitud del registro en tu celda de Excel es mayor */
data lorraine; /* Nombre de la tabla aquí z , no olvidar asignar la librería si no, importar en work */
attrib
reg length=$5
dep length=$5
CG length=$5
LIBGEO length=$50 ;
infile test dlm='09'x notab dsd truncover pad; /* NO CAMBIAR NADA */
input
reg $
dep $
CG $
LIBGEO $
;
run;
filename cmds dde 'excel|system'; /* NO CAMBIAR */
data _null_; /* NO CAMBIAR Para cerrar Excel */
file cmds;
put '[quit()]';
run;
Comentarios sobre el mensaje anterior, he encontrado el error de localización, pero ahora tengo el fallo "fatale" mostrado en el log:
ERROR: La sesión DDE no está lista.
FATAL: Se detectó un error de E/S irreparable durante la ejecución del programa en la etapa de datos. Interrumpido durante la fase DE EJECUCIÓN.
ERROR: La sesión DDE no está lista.
FATAL: Se detectó un error de E/S irreparable durante la ejecución del programa en la etapa de datos. Interrumpido durante la fase DE EJECUCIÓN.
Hola y gracias por publicar sus errores.
Este error proviene de que Excel no está listo y que la etapa de datos no puede recuperar la info de la hoja de Excel.
Dos cosas pueden ser la fuente del error:
- el tiempo de pausa entre la apertura de Excel y la etapa es demasiado corto y la etapa de datos no puede realizarse (si la máquina es antigua y se observa un inicio lento de Excel o si el archivo es voluminoso...)
> intentar entonces aumentar la pausa
sleep=mcipislp(15);
- Excel ya está abierto, y realiza operaciones que impiden la apertura del archivo
creo más bien que hay que buscar del lado de Excel, tu código ha quedado bien adaptado.
¿Has creado un acceso directo de Excel directamente en C? si no, intenta especificar la ruta original de instalación de Excel...
Espero haber sido útil.
Este error proviene de que Excel no está listo y que la etapa de datos no puede recuperar la info de la hoja de Excel.
Dos cosas pueden ser la fuente del error:
- el tiempo de pausa entre la apertura de Excel y la etapa es demasiado corto y la etapa de datos no puede realizarse (si la máquina es antigua y se observa un inicio lento de Excel o si el archivo es voluminoso...)
> intentar entonces aumentar la pausa
sleep=mcipislp(15);
- Excel ya está abierto, y realiza operaciones que impiden la apertura del archivo
creo más bien que hay que buscar del lado de Excel, tu código ha quedado bien adaptado.
¿Has creado un acceso directo de Excel directamente en C? si no, intenta especificar la ruta original de instalación de Excel...
Espero haber sido útil.
Hola,
He ajustado efectivamente el tiempo, lo he puesto a 60 segundos (ver abajo). Si Excel no está ya abierto, no logra encontrar el archivo fuente ("ERREUR: Le fichier physique n'existe pas, excel|system."). Cuando Excel está abierto, y a pesar de haber aumentado el tiempo, siempre me muestra el mismo mensaje de error:
ERREUR: Session DDE n'est pas prête.
FATAL: Erreur d'E/S non réparable détectée lors de l'exécution du programme
étape data. Interrompu pendant la phase EXECUTION.
NOTE: Le Système SAS a interrompu le traitement de cette étape en raison
d'erreurs.
(la log est détaillée ci-dessous également).
¿No podría deberse a un defecto de módulo? Solo tengo el módulo SAS PERSONAL ANALYTICS...
Gracias de antemano.
/******************** PROGRAMA ****************/
libname x 'C:\table.sas7dbat';
options pagesize = 60 linesize = 80;
options nodate;
run;
options noxwait noxsync;
x 'C:\Program Files\Microsoft Office\Office10\excel.exe'; /* EL RUTA DE ACCESO DEBE MODIFICARSE según la ubicación de su ejecutable de Excel (p. ej. c:/program files, etc...) es la ruta que SAS debe seguir para abrir Excel*/
data _null_;
sleep=mcipislp(60);
run;
filename cmds dde 'excel|system'; /* NO CAMBIAR NADA */
data _null_;
file cmds;
put '[open("C:\test_sas.xls")]'; /*Indicar la ruta completa y el nombre del archivo que desea importar; si SAS no lo encuentra, aparecerá un mensaje en el log y la caja de mensaje de Excel indicando que el archivo no existe */
run;
filename test dde 'excel|Feuil1!r1c1:r4c4' ;
/* "Fusion_crash" es para modificar el nombre de la hoja si no lo ha renombrado; suele ser ("feuille1" o "sheet1")
r2c1:r38c3 : el rango de celdas a recuperar; r para fila, c para columna; recordar dejar el apóstrofe justo después del 3 en el ejemplo
Lrecl si se omite es 256 por defecto; modifíquelo si la longitud del registro en su celda de Excel es mayor */
data x.lorraine; /* Nombre de la tabla aquí; z, no olvidar asignar la librería; si no, importarlo en work */
attrib
reg length=$5
dep length=$5
CG length=$5
LIBGEO length=$50 ;
infile test dlm='09'x notab dsd truncover pad; /* NO CAMBIAR */
input
reg $
dep $
CG $
LIBGEO $;
run;
filename cmds dde 'excel|system'; /* NO CAMBIAR */
data _null_; /*NO CAMBIAR Para cerrar Excel */
file cmds;
put '[quit()]';
run;
/*******************LOG*************/
61 options noxwait noxsync;
62 x 'C:\Program Files\Microsoft Office\Office10\excel.exe'
62 ! ; /* LA RUTA DE ACCESO DEBE MODIFICARSE según la ubicación de su ejecutable de Excel
62 ! (p. ej. c:/program files, etc...) es la ruta que SAS debe seguir para abrir
62 ! Excel*/
63
64 data _null_;
65 sleep=mcipislp(60);
66 run;
NOTE: La etapa DATA utilizó (Duración total del proceso):
tiempo real 1:00.02
tiempo de procesador 0.32 segundos
67 filename cmds dde 'excel|system'; /* NO cambiar */
68
69 data _null_;
70 file cmds;
71 put '[open("C:\test_sas.xls")]'; /*Indicar la ruta completa y el nombre del
71 ! archivo que desea importar si SAS no lo encuentra, aparecerá un mensaje
71 ! en el log y la caja de mensaje de Excel indicando que el archivo
71 ! no existe */
72 run;
NOTE: El archivo CMDS es:
Session DDE,
SESSION=excel|system,RECFM=V,LRECL=256
NOTE: 1 registro copiado al archivo CMDS.
La longitud mínima del registro era 25.
La longitud máxima del registro era 25.
NOTE: La etapa DATA utilizó (Duración total del proceso):
tiempo real 0.29 segundos
tiempo de procesador 0.01 segundos
73
74 filename test dde 'excel|Feuil1!r1c1:r4c4' ;
75 data x.lorraine; /* Nombre de la tabla aquí; z, no olvidar asignar la
75 ! librería; si no, importarlo en work */
76 attrib
77 reg length=$5
78 dep length=$5
79 CG length=$5
80 LIBGEO length=$50 ;
81 infile test dlm='09'x notab dsd truncover pad; /* NO CAMBIAR */
82
83 input
84 reg $
85 dep $
86 CG $
87 LIBGEO $;
88 run;
NOTE: INPUT es:
Session DDE,
SESSION=excel|Feuil1!r1c1:r4c4,RECFM=V,
LRECL=256
ERREUR: Session DDE n'est pas prête.
FATAL: Erreur d'E/S non réparable détectée lors de l'exécution du programme
étape data. Interrompu pendant la phase EXECUTION.
NOTE: Le Système SAS a interrompu le traitement de cette étape en raison
d'erreurs.
AVERTISSEMENT: La table X.LORRAINE es可能 incompleta. Cuando esta
etapa fue detenida, había 0 observaciones y 4 variables.
AVERTISSEMENT: Table X.LORRAINE no reemplazada porque esta etapa fue interrumpida.
NOTE: La etapa DATA utilizó (Duración total del proceso):
tiempo real 0.07 segundos
tiempo de procesador 0.05 segundos
He ajustado efectivamente el tiempo, lo he puesto a 60 segundos (ver abajo). Si Excel no está ya abierto, no logra encontrar el archivo fuente ("ERREUR: Le fichier physique n'existe pas, excel|system."). Cuando Excel está abierto, y a pesar de haber aumentado el tiempo, siempre me muestra el mismo mensaje de error:
ERREUR: Session DDE n'est pas prête.
FATAL: Erreur d'E/S non réparable détectée lors de l'exécution du programme
étape data. Interrompu pendant la phase EXECUTION.
NOTE: Le Système SAS a interrompu le traitement de cette étape en raison
d'erreurs.
(la log est détaillée ci-dessous également).
¿No podría deberse a un defecto de módulo? Solo tengo el módulo SAS PERSONAL ANALYTICS...
Gracias de antemano.
/******************** PROGRAMA ****************/
libname x 'C:\table.sas7dbat';
options pagesize = 60 linesize = 80;
options nodate;
run;
options noxwait noxsync;
x 'C:\Program Files\Microsoft Office\Office10\excel.exe'; /* EL RUTA DE ACCESO DEBE MODIFICARSE según la ubicación de su ejecutable de Excel (p. ej. c:/program files, etc...) es la ruta que SAS debe seguir para abrir Excel*/
data _null_;
sleep=mcipislp(60);
run;
filename cmds dde 'excel|system'; /* NO CAMBIAR NADA */
data _null_;
file cmds;
put '[open("C:\test_sas.xls")]'; /*Indicar la ruta completa y el nombre del archivo que desea importar; si SAS no lo encuentra, aparecerá un mensaje en el log y la caja de mensaje de Excel indicando que el archivo no existe */
run;
filename test dde 'excel|Feuil1!r1c1:r4c4' ;
/* "Fusion_crash" es para modificar el nombre de la hoja si no lo ha renombrado; suele ser ("feuille1" o "sheet1")
r2c1:r38c3 : el rango de celdas a recuperar; r para fila, c para columna; recordar dejar el apóstrofe justo después del 3 en el ejemplo
Lrecl si se omite es 256 por defecto; modifíquelo si la longitud del registro en su celda de Excel es mayor */
data x.lorraine; /* Nombre de la tabla aquí; z, no olvidar asignar la librería; si no, importarlo en work */
attrib
reg length=$5
dep length=$5
CG length=$5
LIBGEO length=$50 ;
infile test dlm='09'x notab dsd truncover pad; /* NO CAMBIAR */
input
reg $
dep $
CG $
LIBGEO $;
run;
filename cmds dde 'excel|system'; /* NO CAMBIAR */
data _null_; /*NO CAMBIAR Para cerrar Excel */
file cmds;
put '[quit()]';
run;
/*******************LOG*************/
61 options noxwait noxsync;
62 x 'C:\Program Files\Microsoft Office\Office10\excel.exe'
62 ! ; /* LA RUTA DE ACCESO DEBE MODIFICARSE según la ubicación de su ejecutable de Excel
62 ! (p. ej. c:/program files, etc...) es la ruta que SAS debe seguir para abrir
62 ! Excel*/
63
64 data _null_;
65 sleep=mcipislp(60);
66 run;
NOTE: La etapa DATA utilizó (Duración total del proceso):
tiempo real 1:00.02
tiempo de procesador 0.32 segundos
67 filename cmds dde 'excel|system'; /* NO cambiar */
68
69 data _null_;
70 file cmds;
71 put '[open("C:\test_sas.xls")]'; /*Indicar la ruta completa y el nombre del
71 ! archivo que desea importar si SAS no lo encuentra, aparecerá un mensaje
71 ! en el log y la caja de mensaje de Excel indicando que el archivo
71 ! no existe */
72 run;
NOTE: El archivo CMDS es:
Session DDE,
SESSION=excel|system,RECFM=V,LRECL=256
NOTE: 1 registro copiado al archivo CMDS.
La longitud mínima del registro era 25.
La longitud máxima del registro era 25.
NOTE: La etapa DATA utilizó (Duración total del proceso):
tiempo real 0.29 segundos
tiempo de procesador 0.01 segundos
73
74 filename test dde 'excel|Feuil1!r1c1:r4c4' ;
75 data x.lorraine; /* Nombre de la tabla aquí; z, no olvidar asignar la
75 ! librería; si no, importarlo en work */
76 attrib
77 reg length=$5
78 dep length=$5
79 CG length=$5
80 LIBGEO length=$50 ;
81 infile test dlm='09'x notab dsd truncover pad; /* NO CAMBIAR */
82
83 input
84 reg $
85 dep $
86 CG $
87 LIBGEO $;
88 run;
NOTE: INPUT es:
Session DDE,
SESSION=excel|Feuil1!r1c1:r4c4,RECFM=V,
LRECL=256
ERREUR: Session DDE n'est pas prête.
FATAL: Erreur d'E/S non réparable détectée lors de l'exécution du programme
étape data. Interrompu pendant la phase EXECUTION.
NOTE: Le Système SAS a interrompu le traitement de cette étape en raison
d'erreurs.
AVERTISSEMENT: La table X.LORRAINE es可能 incompleta. Cuando esta
etapa fue detenida, había 0 observaciones y 4 variables.
AVERTISSEMENT: Table X.LORRAINE no reemplazada porque esta etapa fue interrumpida.
NOTE: La etapa DATA utilizó (Duración total del proceso):
tiempo real 0.07 segundos
tiempo de procesador 0.05 segundos
de hecho, este error me parece inusual.
Las enlaces DDE son el sistema de intercambio de datos más antiguo utilizado por SAS.
No requiere ningún módulo adicional.
Simplemente parece que SAS no logra comunicarse con su sistema operativo.
Alguna información sobre su puesto de trabajo podría ayudar a resolver este problema.
Las enlaces DDE son el sistema de intercambio de datos más antiguo utilizado por SAS.
No requiere ningún módulo adicional.
Simplemente parece que SAS no logra comunicarse con su sistema operativo.
Alguna información sobre su puesto de trabajo podría ayudar a resolver este problema.
Hola,
Estoy intentando importar un archivo txt o csv en SAS.
Algunas columnas se convierten en texto aunque estaban en formato numérico antes de la transferencia, ¿cómo resolver este problema? GRACIAS
Estoy intentando importar un archivo txt o csv en SAS.
Algunas columnas se convierten en texto aunque estaban en formato numérico antes de la transferencia, ¿cómo resolver este problema? GRACIAS
Sería necesario verificar en su programa que especifica claramente que la primera fila del archivo Excel contiene los encabezados de las columnas. También es posible que en una modalidad de esta columna aparezca una letra. ¿Podría echar un vistazo rápido a todas las modalidades? Otra solución, y después de haber verificado cuidadosamente que no ha habido desalineo de sus modalidades en la tabla importada en SAS (por ejemplo, si una de las variables contiene comas, SAS la interpretará como un separador y considerará lo que está después de la coma como una modalidad aparte), es recodificar su variable de texto al formato numérico.
Puede que sea necesario poner puntos en lugar de sus comas. La coma se usa generalmente como separador de campos y no para la decimal. Como funciona con estilo anglosajón, el punto reemplaza a la coma. Espero que su problema venga de ahí.
Hola,
Soy usuario de SAS desde hace bastante tiempo. Sé programar en SAS e importar archivos Excel sin problema. Sin embargo, en el trabajo debo usar Enterprise Guide para importar los archivos Excel y, por lo tanto, no programo a mano. No logro importar los archivos Excel. Me explico:
Tengo un archivo Excel del tipo:
T Precio
Q41988
Q11989
Q21989 45365
Q31989
Q41989 1346,00
Cuando lo importo en Enterprise Guide, SAS no reconoce los valores faltantes y, como resultado, todas las filas quedan llenas de puntos. ¿Es un problema de formato o de informat, pero aún no encuentro la solución.
Si tienes alguna idea,
Gracias de antemano
Soy usuario de SAS desde hace bastante tiempo. Sé programar en SAS e importar archivos Excel sin problema. Sin embargo, en el trabajo debo usar Enterprise Guide para importar los archivos Excel y, por lo tanto, no programo a mano. No logro importar los archivos Excel. Me explico:
Tengo un archivo Excel del tipo:
T Precio
Q41988
Q11989
Q21989 45365
Q31989
Q41989 1346,00
Cuando lo importo en Enterprise Guide, SAS no reconoce los valores faltantes y, como resultado, todas las filas quedan llenas de puntos. ¿Es un problema de formato o de informat, pero aún no encuentro la solución.
Si tienes alguna idea,
Gracias de antemano
Hola,
No conozco Enterprise Guide; sin embargo, ¿no vendría su problema de su valor con coma que leo en su tabla (1346,00)? Bajo SAS, ciertos caracteres generan problemas durante la importación, y la coma es uno de ellos. Usted debe reemplazarla por un punto. A menos que bajo Enterprise Guide sea diferente...
Buena manipulación...
No conozco Enterprise Guide; sin embargo, ¿no vendría su problema de su valor con coma que leo en su tabla (1346,00)? Bajo SAS, ciertos caracteres generan problemas durante la importación, y la coma es uno de ellos. Usted debe reemplazarla por un punto. A menos que bajo Enterprise Guide sea diferente...
Buena manipulación...
- 1
- 2
Siguiente
sas no soporta las comas ! !
:op