如何以编程方式获取SAS中数据集的大小/重量(MB)

时间:2016-11-24 13:23:19

标签: sas

我可以导航到文件资源管理器中的库路径并搜索我的dataset.sas7bdat文件并查看它的大小。
但这不切实际。我甚至不确定WORK库的位置,即使我在远程服务器上执行了它,也很难访问它。

是否可以在日志或报告中打印数据集的大小/重量?

  

使用SAS EG 7.1和SAS 9.3

动机:我想这样做,因为我会尝试减少数据集大小,我想知道我获得了多少。

2 个答案:

答案 0 :(得分:1)

只要您的库使用BASE引擎,您就可以使用pathname()函数来查找它。之后,您可以使用sashelp视图来获取文件大小。您也可以使用os命令,但为此您需要启用x命令。

以下演示:

%let libds=WORK.SAMPLE;
/* create demo data */
data &libds;
  retain string 'blaaaaaaaah';
  do x=1 to 10000;
    output;
  end;
run;
/* extract library and datasaet from libds variable */
%let lib=%scan(&libds,1,.);
%let ds =%scan(&libds,2,.);
/* set up filename to point directly at the dataset */
/* note - if you have indexes you also need to do   */
/* this for the .sas7bndx extension                 */
filename fref "%sysfunc(pathname(&lib))/&ds..sas7bdat";
/* query dictionary view for file attributes        */
data _null_;
  set sashelp.vextfl(where=(fileref='FREF'));
  filesize=filesize/(1024**2); /* size in MB */
  putlog filesize= 'MB';
run;
/* clear libref */
filename fref clear;

答案 1 :(得分:1)

您可以使用SQL词典视图dictionary.tables

/* Return libref, dataset name, # records, filesize & % compression */
proc sql ;
  create table size1 as
  select libname, memname, nlobs, filesize, pcompress
  from dictionary.tables
  where libname = 'WORK'
    and memname = 'MYDATA' 
  ;
quit ;