【问题标题】:Use of PIPE and operating system commands in FILENAME statement在 FILENAME 语句中使用 PIPE 和操作系统命令
【发布时间】:2018-04-14 11:25:07
【问题描述】:

如果我在位置 c:/data 中有以下文件夹和 sas 文件,下面的代码会做什么以及 sas dataset new 的可能输出是什么。

新的

new.sas7bat

news.sas7bat

filename files pipe "find c:/data -name '*.sas7bat";
data new;
  infile files lrecl=120 pad missover;
  input;
  if index(lowcase(_infile_), 'datas') then delete;
  type = 'F';
run;

这段代码中_infile是如何处理的。

【问题讨论】:

  • 这是一个没有尝试或研究的问题。你有 SAS 吗?尝试您发布的代码 - 使用您看到的错误或警告更新问题。未尝试发布的代码,因为它缺少单引号和双引号,以及格式错误的 find 命令(假定用于 Windows)。自动变量_infile_infile 语句的作用可以在在线文档中找到。
  • 我没有 SAS 和 unix....所以无法测试它
  • 这不是 unix 命令,C:/ 表示 Windows。此外,SAS 的免费版本可用于学习目的(SAS 大学版)。
  • @Reeza - FWIW,SAS 大学不支持 PIPE 和操作系统命令。

标签: sas


【解决方案1】:

INFILE 语句读取文件,_infile_ 部分是 PIPE 命令的输出。在这种情况下,INFILE 只是获取从操作系统传递的信息,在这种情况下可能是 Windows,因为 C:\ 部分。

FIND 在 Windows 中搜索具有 sas7bdat 的文件夹中的文件,因此该程序很可能在数据文件夹中搜索 SAS7BDAT 文件列表。

此问题中没有任何内容表明涉及 UNIX。 FIND 是一个 WINDOWS 和/或 UNIX 命令。

【讨论】:

    【解决方案2】:

    在 Unix 中,find 命令是搜索文件系统(目录树)的非常强大的工具。您使用 -name 谓词的示例将返回与您的模式匹配的文件名。因为您没有以任何其他方式限制它,所以它将从给定的路径开始搜索整个子树。

    当您在数据步骤中使用INPUT 语句时,_infile_ 自动变量可用。它将保存从输入文件中读取的最后一行。在这种情况下,输入文件是 Unix find 命令的结果流。

    您的 SAS 程序并不完整。本质上,您正在创建一个数据集,其中只有一个名为 type 的变量始终具有值 "F"。唯一的信息是观察的数量将与找到的名称(包括目录路径)不包含字符串 "datas" 的 SAS 数据集的数量相匹配。

    因此,如果您想在路径 /data 下查找所有 SAS 数据集的名称,其中名称(和路径)在任何情况下都不包含字符串 datas,那么您很可能想要这样的东西:

    data new;
      infile "find /data -name '*.sas7bat'" pipe truncover ;
      input fname $256. ;
      if index(lowcase(fname), 'datas') then delete;
      type='F';
    run;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-23
      • 2019-05-13
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 2012-12-27
      • 2013-02-01
      相关资源
      最近更新 更多