SAS:获取创建的 DBF 文件的文件大小

SAS: getting the filesize of created DBF file

我有 SAS 存储过程,它从 SAS 数据集 rr_udf_value 生成 DBF 文件并找到它的大小 (F_SIZE):

filename dbfout "/SASInside/DBF/myfile";

proc export
   data=rr_udf_value
   outfile=dbfout
   dbms=dbf
   replace;
run; 

%let f_nm=/SASInside/DBF/myfile.DBF;

%let rc=%sysfunc(filename(onefile, &f_nm.));
%let fid=%sysfunc(fopen(&onefile));
%let F_SIZE=%sysfunc(finfo(&fid,File Size (bytes)));
%put &F_SIZE;

问题是变量 F_SIZE 在 STP 日志中为空。但是如果在执行 STP 之后我 运行 命令

%let f_nm=/SASInside/DBF/myfile.DBF;

%let rc=%sysfunc(filename(onefile, &f_nm.));
%let fid=%sysfunc(fopen(&onefile));
%let F_SIZE=%sysfunc(finfo(&fid,File Size (bytes)));
%put FSIZE=&F_SIZE;

手动,一切正常:F_SIZE=17342。

为什么 F_SIZE 在 运行 宁 STP 时没有初始化,我该如何解决?

提前致谢!

filename() 在具有 OPTION NOXCMD 的环境中受到限制,默认情况下为服务器环境设置。这是出于安全原因(因为 XCMD 允许 shell 访问)。您可以通过启用 OPTION XCMD 来启用它,尽管您的服务器管理员(如果这不是您)通常必须在服务器上而不是在您的本地会话中启用它。

有关详细信息,请参阅 the SAS documentation on XCMD