Parsing SAS:解析没有通用文件名的多个文件

Parsing SAS:解析没有通用文件名的多个文件,parsing,sas,Parsing,Sas,假设在一个文件夹中,我有100多个+.dat文件,没有通用的文件名。例如,这些文件没有命名为f001,f002,f003(您可以获得模式)。名字是随机的。我需要将这些.dat文件解析为SAS文件。每个文件都具有相同的列/属性。我使用以下代码来解析.dat文件之一: data have; infile 'C:\SAS\have.dat' dsd dlm='|'; input var1 var2 var3$;run; 每个.dat文件的代码相同。SAS中是否有一种方法可以简单地解析文件夹中的所有文

假设在一个文件夹中,我有100多个+
.dat
文件,没有通用的文件名。例如,这些文件没有命名为
f001
f002
f003
(您可以获得模式)。名字是随机的。我需要将这些
.dat
文件解析为SAS文件。每个文件都具有相同的列/属性。我使用以下代码来解析
.dat
文件之一:

data have;
infile 'C:\SAS\have.dat' dsd dlm='|';
input var1 var2 var3$;run;
每个
.dat
文件的代码相同。SAS中是否有一种方法可以简单地解析文件夹中的所有文件,并将这些SAS文件命名为与其原始文件相同的名称
.dat
。我希望所有的文件是分开的,而不是在一个SAS文件

[更新] 首先,我使用以下SAS命令读取文件夹中的所有文件名:

data yfiles;
keep filename;
length fref $
8 filename $ 80;
rc = filename(fref,
'Y:\Files\Exchanges');
if rc = 0 then do ;
did = dopen(fref);
rc = filename(fref); end;
else do; length msg $200.;
msg = sysmsg();
put msg=; did =.;
end;
if did <=0 then putlog
'ERR' 'OR: Unable to open directory.';
dnum = dnum(did);
do i =1 to dnum;
filename = dread(did, i);
/* If this entry is a file, then output. */
fid = mopen(did, filename);
if fid >0 then output;
end;
rc = dclose(did);
run;
数据文件;
保留文件名;
长度fref$
8.80美元;
rc=文件名(fref,
“Y:\Files\Exchanges”);
如果rc=0,则执行;
did=dopen(fref);
rc=文件名(fref);结束;
否则你会;长度:200美元。;
msg=sysmsg();
放味精=;did=。;
结束;
如果没有0,则输出;
结束;
rc=dclose(did);
跑
yfiles
中,我拥有
.dat
数据集的所有名称


现在,如何循环使用我的
yfiles
数据集的每个
.dat
文件名来应用上述解析代码?

尝试使用管道文件引用,并使用命令列出目录。解析输出并循环目录内容。

尝试使用管道文件ref,并使用命令列出目录。解析输出并循环目录内容。

使用
CALL EXECUTE
和数据步骤循环文件名。您可以使用数据步骤来构建和执行SAS语句

data _null_;
set yfiles;
format outStr $200.;

outStr = 'data have' || strip(put(_N_,best.)) || ';';
call execute(outStr);

outStr = "infile 'C:\SAS\" || strip(filename) || "' dsd dlm='|';";
call execute(outStr);

call execute("input var1 var2 var3$;run;");
run;

使用
callexecute
和数据步骤循环文件名。您可以使用数据步骤来构建和执行SAS语句

data _null_;
set yfiles;
format outStr $200.;

outStr = 'data have' || strip(put(_N_,best.)) || ';';
call execute(outStr);

outStr = "infile 'C:\SAS\" || strip(filename) || "' dsd dlm='|';";
call execute(outStr);

call execute("input var1 var2 var3$;run;");
run;

您想在不同的数据集中还是在一个大数据集中?在不同的数据集中?您想在不同的数据集中还是在一个大数据集中?在不同的数据集中,我用一个代码更新了我的问题,该代码读取了我所有的
.dat
文件,并将名称存储在SAS数据集中。如何循环遍历
yfiles
中的每个文件名,以便将数据集文件名合并到解析代码中?这就是管道发挥作用的地方吗?我将添加一个不同的答案。您已经使用SAS函数来获取名称,这是另一种方式。因此,忘记管道文件参考。我用一个代码更新了我的问题,该代码读取我所有的
.dat
文件,并将名称存储在SAS数据集中。如何循环遍历
yfiles
中的每个文件名,以便将数据集文件名合并到解析代码中?这就是管道发挥作用的地方吗?我将添加一个不同的答案。您已经使用SAS函数来获取名称,这是另一种方式。所以忘记管道文件ref。