【问题标题】:How to import multiple different delimited files in sas?如何在sas中导入多个不同的分隔文件?
【发布时间】:2015-10-30 15:32:52
【问题描述】:

我有一个包含多个文件的文件夹。每个都属于不同的类别(例如:5 个文件是制表符分隔的,5 个是 csv 文件,5 个是管道分隔的,等等)。如何使用 SAS 导入它们? (我不想单独导入它们。)

【问题讨论】:

  • 文件是否具有相同的结构,即相同的变量?
  • 你没有提到你将如何导入细节很重要。如果您使用数据步骤程序,您可以将它们全部作为一个流读取。查看 INFILE 语句文档,您将看到 DLM= 可以指定包含分隔符的变量。
  • 它们都有相同的变量。我必须阅读它们并将它们附加为一个文件。我想知道是否存在读取多个文件的单一方法?
  • 存在许多方法。你看过吗?有很多关于这类事情的问题,还有谷歌可用的论文。

标签: file import sas


【解决方案1】:

有趣的问题。如果您可以通过查看线条来确定分隔符的逻辑,那么它应该很容易。让我们制作一些示例文件。

%let path=%sysfunc(pathname(work));
data _null_;
  set sashelp.class ;
  if _n_ < 7 then file "&path/1_csv.txt" dsd dlm=',';
  else if _n_ < 13 then file "&path/2_tab.txt" dsd dlm='09'x;
  else file "&path/3_pipe.txt" dsd dlm='|' ;
  put (_all_) (+0);
run;

现在让我们尝试阅读它们。首先读取该行,然后根据您所看到的设置 DLM 变量。然后读取数据。

data want ;
   if 0 then set sashelp.class ;
   length dlm $1.;
   infile "&path/*.txt" dsd dlm=dlm truncover;
   input @;
   if indexc(_infile_,'09'x) then dlm='09'x;
   else if indexc(_infile_,'|') then dlm='|';
   else if indexc(_infile_,',') then dlm=',';
   input name -- weight;
run;

现在让我们将结果与原始数据进行比较。注意:根据您的操作系统,文件的读取顺序可能与生成时的顺序不同,因此您可能需要在尝试比较之前进行排序。

proc compare data=want compare=sashelp.class; run;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多