database - 在 SAS 中导入许多文件 .txt
问题描述
我构建了一个将多个数据同时导入 SAS 的代码,但我想改进它,有人有什么建议吗?
filename indata pipe 'dir E:\Desafio_SAS\Dados /B';
data file_list;
length arquivos$20.;
infile indata truncover ;
input arquivos $20.;
call symput('num_files',_n_);
arquivos=compress(arquivos,',.txt');
run;
CRIANDO UMA MACRO POR PROC SQL PARA GUARDAR O NOME DOS ARQUIVOS
proc sql;
select arquivos into :lista separated by ' ' from file_list;
quit;
%let &lista;
%macro importar(arquivo=);
filename data "E:\Desafio_SAS\Dados\&arquivo..txt";
data &arquivo;
infile data dlm=" " missover dsd firstobs=2;
input v0 (v1 - v8) ($);
format v0 F16.;
run;
%mend importar;
%macro fileout;
%do i=1 %to &num_files;
%importar(arquivo=df&i);
data df&i;
set var_names df&i;
run;
%end;
%mend fileout;
%fileout;
%macro excluiv0;
%do i=1 %to &num_files;
data _null_;
data df&i(drop = v0);
set df&i;
run;
%end;
run;
%mend excluiv0;
%excluiv0;
这只是代码的一部分。
解决方案
您可以在 infile 文件规范中使用通配符。只要满足通配符的所有文件都是相同的布局,就可以使用单一输入读取所有文件。
例子
* create three text files having same fields;
data _null_;
file '%temp%\1.txt';
put '1 2 3 abc';
put '3 4 5 def';
file '%temp%\2.txt';
put '6 7 8 ghi';
put '9 10 11 jkl';
file '%temp%\3.txt';
put '12 13 14 xyz';
put '15 16 17 tuv';
run;
* read all three using wildcard in infile. Save name of file whence
* data cometh frometh;
data want;
length _filename_ $250;
infile '%temp%\?.txt' filename=_filename_;
length source $250;
length a b c 8 s $20;
source = _filename_;
input a b c s;
run;
通配符是
- ?, 0 或 1 任意字符
- *,任意数量的任意字符
推荐阅读
- javascript - 使用 javascript 禁用 bootstrap 5 spinner 的 div 块
- fhir-server-for-azure - 使用 client_credentials 身份验证流程时出现 401
- amazon-web-services - Ansible - 使用 NFS 在 Windows Server 2019 上挂载 Amazon EFS 文件系统:网络错误 53
- sql - Druid SQL 按日期分组
- python - 从其他脚本导入的变量只显示初始值
- java - 如何使用事务回栈来弹出片段?
- python - 超过某个时间点时的通知(Python)
- ios - iOS Core Data:仅保存背景上下文就足够了吗?为什么或者为什么不?
- javascript - JavaScript:推送嵌套对象键值对
- powershell - 在 Invoke-Command 的 ScriptBlock 中重定向 Import-Module 的输出