如果我在位置c:/ data中有下面的文件夹和sas文件,下面的代码会做什么以及sas数据集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如何处理此代码。
答案 0 :(得分:0)
INFILE
语句读取文件,_infile_
部分是PIPE命令的输出。在这种情况下,INFILE
只是获取从OS传递的信息,在这种情况下可能是Windows,因为C:\
部分。
FIND
,搜索文件夹中包含sas7bdat的文件,因此该程序可能会在数据文件夹中搜索SAS7BDAT文件列表。
此问题中没有任何内容表明涉及UNIX。 FIND是WINDOWS和/或UNIX命令。
答案 1 :(得分:0)
在Unix中,find
命令是一个非常强大的搜索文件系统(目录树)的工具。使用-name
谓词的示例将返回与您的模式匹配的文件名。因为你没有以任何其他方式限制它,它将从给定的路径开始搜索整个子树。
在数据步骤中使用_infile_
语句时,INPUT
自动变量可用。它将保存从输入文件中读取的最后一行。在这种情况下,输入文件是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;