在宏变量中调用系统输出

时间:2013-09-10 16:04:47

标签: macros sas aix

我想在AIX中获取csv文件的文件大小,并使用以下X和Call System Command来完成。问题是我无法在宏变量中获得“文件大小”,我将在稍后的程序中使用它。

data _null_;
    call system('du -g p_bhj_c_hh100uk01po1.csv');
    call symput('space','X du -g p_bhj_c_hh100uk01po1.csv');
    %put &space; 
run;


WARNING: Apparent symbolic reference SPACE not resolved.

1 个答案:

答案 0 :(得分:2)

首先,您调用的SYMPUT子例程不会像您尝试使用它一样工作(ala Perl)。我建议阅读相关文档。

您在SPACE宏上获得的错误是因为它在DATA步骤中。宏为您“编写”SAS代码,因此在执行DATA步骤之前,&SPACE宏正在尝试解析。

以下是执行所需操作的代码示例:

data _null_;
rc = filename("ref","e:\temp\reg.pdf");
fid = fopen("ref");
infonum = foptnum(fid);
do i=1 to infonum;
    infoname = foptname(fid,i);
    infoval=finfo(fid,infoname);
    put infoname= infoval=;
end;
close = fclose(fid);
run;

/*In Windows, attribute is "File Size (bytes)"*/
data _null_;
rc = filename("ref","e:\temp\reg.pdf");
fid = fopen("ref");
size=finfo(fid,"File Size (bytes)");
call symput("size",size);
close = fclose(fid);
run;
%put &size;

AIX中的文件大小属性可能不同。运行第一部分以查看所有可用属性。然后相应地修改第二个。同样,您需要添加调用以生成您正在执行的文件。