gpt4 book ai didi

SAS - 检查外部文件 (.csv) 是否为空;如果没有,导入到 SAS

转载 作者:行者123 更新时间:2023-12-04 20:19:39 26 4
gpt4 key购买 nike

我想导入到 SAS 的文件夹中有几个 .csv 文件。但是,它们并不总是填充有数据,因此当我尝试将空文件导入 SAS 时,出现错误。我想知道是否有某种方法可以让我检查外部文件是否为空,如果不是,则将其引入 SAS。这是我想要自动化的代码,而不必每次都手动检查和说明空白文件。

我在 SAS 的知识库中遇到了这个宏,但不确定如何修改它以便导入 .csv 文件,如果我应该使用它的话:http://support.sas.com/kb/25/072.html

我感谢您的帮助。

最佳答案

这是链接中的相关宏:

%macro test(outf);
%let filrf=myfile;
%if %sysfunc(fileexist(&outf)) %then %do;
%let rc=%sysfunc(filename(filrf,&outf));
%let fid=%sysfunc(fopen(&filrf));
%if &fid > 0 %then %do;
%let rc=%sysfunc(fread(&fid));
%let rc=%sysfunc(fget(&fid,mystring));
%if &rc = 0 %then %put &mystring;
%else %put file is empty;
%let rc=%sysfunc(fclose(&fid));
%end;
%let rc=%sysfunc(filename(filrf));
%end;
%else %put file does not exist;
%mend test;

%test(c:\test.txt)

您想要做的是在文件为空的情况下更改宏的作用。在这种情况下, fget如果能够获取字符串,将向返回代码( %let rc = ... fget )返回 0,否则将失败并返回非零代码。

所以,只需修改 %if / %else .而不是放东西,你只是做类似的事情
%if &rc=0 %then %do;
%import_csv(&outf.);
%end;
%else %do;
%put File &outf. is empty.;
%end;

假设您有一个执行导入的宏。当然,您可以在其中包含完整的 PROC IMPORT 代码。

事实上,这确实为导入宏做了一个合理的错误检查包装。
%macro import_csv(outf=,outds=);
%let filrf=myfile;
%if %sysfunc(fileexist(&outf)) %then %do;
%let rc=%sysfunc(filename(filrf,&outf));
%let fid=%sysfunc(fopen(&filrf));
%if &fid > 0 %then %do;
%let rc=%sysfunc(fread(&fid));
%let rc=%sysfunc(fget(&fid,mystring));
%let rc_close=%sysfunc(fclose(&fid));
%if &rc = 0 %then %do;
proc import file="&outf." out="&outds."
dbms=csv replace;
run;
%end;
%else %put File &outf. is empty and not imported.;
%end;
%let rc=%sysfunc(filename(filrf));
%end;
%else %put file does not exist;
%mend test;

关于SAS - 检查外部文件 (.csv) 是否为空;如果没有,导入到 SAS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25797827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com