Archivo de la etiqueta: INPUT

Trucos SAS. Más usos de INFILE y PIPE directorios en tablas SAS

Puede interesarnos tener directorios y subdirectorios en tablas SAS. Es decir, tabular el resultado de un lm en Unix o poner en una tabla el resultado de un dir de MS DOS / Windows. Ya tengo ejemplos publicados a este respecto:

Pero no está mal volver a poner un truco para analizar las posibilidades del INFILE + PIPE. Vamos a hacer un DIR de todo nuestro C:\ y sacar los archivos de mayor tamaño.
*ESTA ES LA INSTRUCCION DIR QUE EMPLEAMOS,
SUBDIRECTORIOS, AUTORES, ... (?dir);
filename df pipe "dir H:\ /S /O S /Q";
*CREAMOS UNA TABLA SAS CON EL RESULTADO DE
LA INSTRUCCIÓN MS DOS;
data ZZZ_ZZZ;
infile df pad;
input todo $300.;
if _n_=1 then delete;
run;

Tenemos una tabla SAS con el resultado de nuestro dir en una variable de texto todo de 300 bytes . Podemos extraer la información que deseamos trabajando con funciones de texto de SAS:
data archivos;
keep fecha archivo GIGAS autor;
set zzz_zzz;
format fecha ddmmyy10.;
fecha=input(substr(todo,1,10),ddmmyy10.);
GIGAS=compress(scan(todo,3," "),".")*1;
GIGAS=GIGAS/(1024**3);
autor=scan(todo,4," ");
archivo=substr(todo,60,100);
if fecha=. then delete;
if GIGAS=. then delete;
run;

La variable fecha tiene el formato ddmmyy10. y es el resultado de transformar parte de nuestra variable de texto todo a número y con input darle el formato de entrada adecuado, perfecto ejemplo de transformación de texto a fecha con SAS. El tamaño es la 3 parte de la cadena de texto que se obtiene con un dir, pero como lo tenemos en bytes lo transformamos a gigas. Para extraer parte de una cadena de texto con SAS empleamos la función SCAN, otro buen ejemplo es el autor que lo podemos encontrar en la cuarta posición. Recordamos: SCAN(todo,4,” “) -> busca en todo la cadena de texto que esté en cuarta posición cuando el delimitador es “ “ un espacio en blanco. Por último tenemos el nombre del archivo que es la última parte de la cadena todo que genera el dir de MS-DOS.
Buen ejemplo para recordar un par de temas que provocan un gran número de visitas a esta web. Ahora os dejo deberes, tenéis que obtener el directorio en el que se aloja el fichero. No es baladí el tema. A ver si sois capaces, yo lo tengo hecho pero es muy complejo y “poco elegante”. Espero que a alguno de vosotros se os ocurra un mejor método.

Curso de lenguaje SAS con WPS. Lectura de ficheros de texto

Leer ficheros de texto con lenguaje SAS no es sencillo debido a la escasa flexibilidad de SAS.  La cosa se complica cuando leemos texto con WPS. Empleando el asistente de SAS y haciendo recall podemos leer ficheros con bastante comodidad. Eso no lo podemos hacer con WPS porque no dispone de asistente ni nada parecido al EFI de SAS. Así que tenemos que tantear con INPUT hasta conseguir leer el fichero correctamente. Pero esta entrada nos permite conocer mejor como funciona el paso DATA. Más adelante veremos como hacerlo con el PROC IMPORT. El primer ejemplo importa un fichero de texto de este tipo:

1 ,479.70055858 ,760.70972521 ,198.59444871 ,75.189163012 ,372.82062293 ,
2 ,754.21879802 ,343.8333852 ,253.53378256 ,398.35220966 ,532.53241281 ,
3 ,554.54856463 ,190.96417175 ,827.15448683 ,537.47661437 ,656.19086086 ,
4 ,377.5517132 ,180.89431253 ,519.43704743 ,814.11889932 ,812.06014837 ,

No tiene cabeceras está delimitado por comas, tiene 6 variables: id, importe1,.., importe5. Conocemos la estructura, el delimitador y las variables:


data importes;
infile "D:\raul\wordpress\curso sas\muestra1.txt" dlm=',';
input id importe1 importe2 importe3 importe4 importe5;
run;

Si estuviera delimitado por tabuladores trabajamos con dlm:


data importes;
infile "D:\raul\wordpress\curso sas\muestra2.txt" dlm='09'x;
input id importe1 importe2 importe3 importe4 importe5;
run;

Es el ejemplo más sencillo DATA genera un dataset que lee de un INFILE y con INPUT creamos un vector de variables que en la terminología de SAS se denomina PDV. Seguir leyendo Curso de lenguaje SAS con WPS. Lectura de ficheros de texto