代码之家  ›  专栏  ›  技术社区  ›  LonelySoul

调用宏变量中的系统输出

  •  0
  • LonelySoul  · 技术社区  · 11 年前

    我想在AIX中获得csv文件的文件大小,并使用以下X和调用系统命令来完成。问题是我无法在宏变量中获得“文件大小”,我将在稍后的程序中使用该变量。

    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 回复  |  直到 11 年前
        1
  •  2
  •   DomPazz    11 年前

    首先,您调用的SYMPUT子例程并不像您试图使用它那样工作(ala Perl)。我建议阅读上面的文档。

    SPACE宏上出现的错误是因为它在DATA步骤中。宏为您“编写”SAS代码,所以它 &SPACE 宏试图在DATA步骤执行之前解析。

    下面是一个代码示例,用于执行您正在查找的操作:

    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中的“文件大小”属性可能不同。运行第一部分以查看所有可用的属性。然后相应地修改第二个。同样,您需要添加调用来生成文件,就像您已经在做的那样。