如果我在位置c:/ data下面有文件夹和sas文件,那么下面的代码做什么以及sas数据集的可能输出是什么?
新
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如何在此代码中处理 .
2 回答
INFILE
语句读取文件,_infile_
部分是PIPE命令的输出 . 在这种情况下,INFILE
只是简单地获取从OS传递的信息,在这种情况下可能是Windows,因为C:\
部分 .在Windows中
FIND
,搜索文件夹中包含sas7bdat的文件,因此该程序可能会在数据文件夹中搜索SAS7BDAT文件列表 .此问题中没有任何内容表明涉及UNIX . FIND是WINDOWS和/或UNIX命令 .
在Unix中,
find
命令是一个非常强大的搜索文件系统(目录树)的工具 . 使用-name
谓词的示例将返回与您的模式匹配的文件名 . 因为您没有以任何其他方式限制它,它将从给定的路径开始搜索整个子树 .在数据步骤中使用
INPUT
语句时,_infile_
自动变量可用 . 它将保存从输入文件中读取的最后一行 . 在这种情况下,输入文件是Unix find命令结果的流式传输 .您的SAS计划并不完整 . 基本上,您创建的数据集只有一个名为
type
的变量,其值始终为"F"
. 唯一的信息是,观察数量将与找到的名称(包括目录路径)不包含字符串"datas"
的SAS数据集的数量相匹配 .因此,如果要在路径
/data
下找到所有SAS数据集的名称,其中名称(和路径)在任何情况下都不包含字符串datas
,那么很可能您需要这样的内容: