【发布时间】:2020-03-16 06:35:03
【问题描述】:
我使用此代码将 CSV 文件数据输入 SAS:
%macro drive(dir,ext);
%local cnt filrf rc did memcnt name;
%let cnt=0;
%let filrf=mydir;
%let rc=%sysfunc(filename(filrf,&dir));
%let did=%sysfunc(dopen(&filrf));
%if &did ne 0 %then %do;
%let memcnt=%sysfunc(dnum(&did));
%do i=1 %to &memcnt;
%let name=%qscan(%qsysfunc(dread(&did,&i)),-1,.);
%if %qupcase(%qsysfunc(dread(&did,&i))) ne %qupcase(&name) %then %do;
%if %superq(&ext) = %superq(&name) %then %do;
%let cnt=%eval(&cnt+1);
%put %qsysfunc(dread(&did,&i));
proc import
datafile="&dir\%qsysfunc(dread(&did,&i))"
dbms=csv
replace
out=dsn&cnt
;
run;
%end;
%end;
%end;
%end;
%else
%put &dir cannot be open.;
%if &did %then %let rc=%sysfunc(dclose(&did));
%mend drive;
%drive(C:path\to\folder\,csv)
但它将数据集命名为 dsn1、dsn2 等,而我希望将文件的名称(不包括 CSV 部分)作为数据集名称。我该怎么做?
【问题讨论】:
-
您确定文件名可以用作数据集名称吗? SAS 数据集名称限制为 32 个字符,并且必须遵循 SAS 命名规则。
-
那段代码还能用吗?您正在使用
%superq()函数错误。它希望引用宏变量的名称,而不是引用的值。 -
@Tom 代码最初来自这里,它确实有效documentation.sas.com/…
-
@Reeza SAS 发布了很多写得不好的代码,因为它们只是为了强调一个观点。如果您使用
EXT=csv调用该代码,那么%superq(&ext)表达式将引用未定义的CSV宏变量的值。
标签: sas