首页 > 解决方案 > 如何处理可能不存在的输入文件 (*.txt)

问题描述

语境:

我正在阅读(使用DATA STEP infile)很多文件夹(大约 80 个),基本上包含三类*.txt文件(4 个 ASCII 文件),处理它们,然后有时将这些数据集合并(实际上使用合并DATA STEP set)每个文件夹的两个数据集,然后结束所有文件夹。有时会发生,缺少一两个类别并且SAS会抛出一个ERROR message ("ERROR: Physical file does not exist")但仍然继续,似乎一切仍在工作。SAS似乎生成了一个空数据集(没有 obs)并使用这些数据集。

问题: 无论如何,我想摆脱这些ERRORS并用%IF语句检查文件是否存在 - 这有效 - 否则跳过数据步骤。但是当我尝试合并那些不存在的数据集时,我得到了一个新的来源ERRORS,而且我正在根据一个变量对这些数据集进行排序,该变量也不存在 - ERROR。我正在考虑检查数据集是否为空并取决于此合并等,但我不确定这是否是最好的主意。有什么建议吗?SAS此外,处理所有数据已经​​花费了大量时间。从耗时的 POV 来看,这是一个好主意(检查文件存在等)吗?

我的解决方案:

这在一定程度上取决于 ASCII 文件包含多少数据,但整个过程已经花费了 1.5 分钟,我将不得不添加更多数据。有DATA STEP infile那么慢吗?

标签: sas

解决方案


您可以使用 %sysfunc(fileexist()) 宏功能。试试下面的代码。传递 FILE 参数时,请确保它包含完整路径。

%macro check(file);
  %if %sysfunc(fileexist(&file)) %then %do;
    %put File &file exists.;

    %* YOUR CODE HERE *;

  %end;
  %else
    %put The external file &file does not exist.;
%mend;

例如

%check(/user/lukas/util/test.csv);


推荐阅读