【问题标题】:How does SAS decide which file to select when using wildcardsSAS如何决定使用通配符时选择哪个文件
【发布时间】:2018-03-20 01:50:12
【问题描述】:

我有一个看起来像这样的 SAS 代码:

DATA WORK.MY_IMPORT_&stamp; 
    INFILE "M:\YPATH\myfile_150*.csv"
    delimiter = ';' MISSOVER DSD lrecl = 1000000 firstobs = 2 ignoredoseof;
    [...]
RUN;

现在,在 M:\YPATH 我有几个名为 myfile_150.YYYYMMDD 的文件。通过始终导入最新文件,代码按预期方式工作。我想知道 SAS 如何决定选择哪个文件,因为通配符 * 可以被任何东西替换。它是否按降序对文件进行排序并选择第一个?

【问题讨论】:

  • "代码按照预期的方式工作,始终导入最新文件。"这不是这段代码要做的。

标签: import sas


【解决方案1】:

在我的系统 SAS 9.4 TS1M4 上,SAS 正在读取所有满足通配符的文件。

我创建了 3 个文件(file_A.csv、file_B.csv 和 file_C.csv)。每个包含 1 条记录(分别为“A”、“B”和“C”)。

data test;
infile "c:\temp\file_*.csv"
    delimiter = ';' MISSOVER DSD lrecl = 1000000 ignoredoseof;
format char $1.;
input char $;
run;

(请注意,我从您的代码中删除了 firstobs 选项。)

生成的 TEST 数据集包含 3 个观测值,“A”、“B”和“C”。

这是发出时返回文件的顺序

dir c:\temp\file_*.csv

SAS 正在使用操作系统的默认行为并按该顺序读取文件。

25   data test;
26   infile "c:\temp\file_*.csv"
27       delimiter = ';' MISSOVER DSD lrecl = 1000000 ignoredoseof;
28   format char $1.;
29   input char $;
30   run;

NOTE: The infile "c:\temp\file_*.csv" is:
      Filename=c:\temp\file_A.csv,
      File List=c:\temp\file_*.csv,RECFM=V,
      LRECL=1000000

NOTE: The infile "c:\temp\file_*.csv" is:
      Filename=c:\temp\file_B.csv,
      File List=c:\temp\file_*.csv,RECFM=V,
      LRECL=1000000

NOTE: The infile "c:\temp\file_*.csv" is:
      Filename=c:\temp\file_C.csv,
      File List=c:\temp\file_*.csv,RECFM=V,
      LRECL=1000000

NOTE: 1 record was read from the infile "c:\temp\file_*.csv".
      The minimum record length was 1.
      The maximum record length was 1.
NOTE: 1 record was read from the infile "c:\temp\file_*.csv".
      The minimum record length was 1.
      The maximum record length was 1.
NOTE: 1 record was read from the infile "c:\temp\file_*.csv".
      The minimum record length was 1.
      The maximum record length was 1.
NOTE: The data set WORK.TEST has 3 observations and 1 variables.
NOTE: DATA statement used (Total process time):
      real time           0.04 seconds
      cpu time            0.00 seconds

【讨论】:

  • 你是对的,我的错。它实际上确实读入了所有这些。我继承了代码,输出数据集中的 update_date 稍后更改为最新文件的日期,这让我感到困惑。
猜你喜欢
  • 1970-01-01
  • 2015-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
相关资源
最近更新 更多