Чтение нескольких CSV-файлов в наборы данных SAS - PullRequest
1 голос
/ 20 декабря 2011

У меня есть следующие CSV-файлы, и мне нужно прочитать их в наборы данных SAS. Также мне нужно назначить имена столбцов. Кроме того, мне нужно, чтобы столбец был числовым, но некоторые столбцы имеют числовые и символьные значения.

папка aa: abc1.csv, abc2.csv, abc3.csv, ...... папка bb: abc1.csv, abc2.csv, abc3.csv, ...... папка cc: abc1.csv, abc2.csv, abc3.csv, ......

Ответы [ 2 ]

2 голосов
/ 09 июля 2012

Вы также можете сделать это следующим образом.

  1. Храните все свои файлы в одной папке.
  2. Назовите их всех в CSV-файле только с одним столбцом.
  3. Импорт файла (csv) с именами файлов в SAS.
  4. Создайте макрос, чтобы сохранить их имя с предложением "into".

    proc sql;
    select name_list into :name separated by '*' from work.name;
    %let count2 = &sqlobs;
    quit;
    
  5. Создайте макрос, как показано ниже.

    %macro yy;
    %do i = 1 %to &count2;
    %let j = %scan(&name,&i,*);
    proc import out = &j datafile="folderwhereallcsvfilesarekept\&j..csv"
    dbms=csv replace;
    getnames = yes;
    run; 
    %end;
    %mend;
    
1 голос
/ 20 декабря 2011

Это не полный ответ, но он поможет вам начать.Вам нужно будет добавить внешний цикл для просмотра различных каталогов, из которых вы хотите получить файлы.

/*List the files in a directory for use in a data step. This is written for Windows. Other operating systems will be slightly different. */
filename fnames pipe 'dir c:\temp\* /b';

/* Create a data set with one observation for each file name */
data fnames;
    infile fnames pad missover;
    input @1 filename $255.;
    n=_n_;
run;

/* Store the number of files in a macro variable "num" */
proc sql noprint; select count(filename) into :num; quit;

/* Create a macro to iterate over the filenames, read them in, and append to a data set. */
%macro doit;
    %do i=1 %to #

        proc sql noprint;
            select filename into :filename from fnames where n=&i;
        quit;

        data ds;
            infile &filename;
            input ...list of variable names...;
            ...other statements...;
        run;

        proc append data=ds base=final; run;
    %end;
%mend;

%doit;
...