将多个csv文件读入SAS数据集

将多个csv文件读入SAS数据集,csv,macros,sas,Csv,Macros,Sas,我有以下csv文件,我需要将它们读入SAS数据集。 另外,我需要指定列名。 此外,我需要列是数字的,但有些列同时具有数字和字符值 文件夹aa:abc1.csv,abc2.csv,abc3.csv,。。。。。。 文件夹bb:abc1.csv,abc2.csv,abc3.csv,。。。。。。 文件夹cc:abc1.csv,abc2.csv,abc3.csv,…这不是一个完整的答案,但它会让您开始。您必须添加一个外部循环,以遍历要从中获取文件的不同目录 /*List the files in a di

我有以下csv文件,我需要将它们读入SAS数据集。 另外,我需要指定列名。 此外,我需要列是数字的,但有些列同时具有数字和字符值

文件夹aa:abc1.csv,abc2.csv,abc3.csv,。。。。。。 文件夹bb:abc1.csv,abc2.csv,abc3.csv,。。。。。。
文件夹cc:abc1.csv,abc2.csv,abc3.csv,…

这不是一个完整的答案,但它会让您开始。您必须添加一个外部循环,以遍历要从中获取文件的不同目录

/*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;

你也可以用下面的方法来做

  • 将所有文件保存在一个文件夹中
  • 在一个只有一列的csv文件中命名它们
  • 将具有文件名的文件(csv)导入SAS
  • 创建一个宏,用“into”子句保留它们的名称

  • 创建一个宏,如下所示

    %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;
    

  • 您是否有n个包含n个csv文件的文件夹?你在Unix、Windows、大型机上吗?是的,我有n个文件夹,其中包含n个csv文件。我在窗户上。我是SAS的新手,真的被这个问题困扰着。谢谢!“需要列为数字”是什么意思?字符值不能存储为数字。我需要将字符值视为缺失,以便列可以是数字。谢谢!非常感谢你,伊奇!但我还是在想办法。对SAS来说真的很新鲜。
    %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;