.sas7bdat文件与.xpt文件批量转换

2020-07-16 10:16:39 浏览数 (1)

当我们拿到的原始数据为.xpt格式时,就需要批量转换成.sas7bdat文件以便后续处理,而当我们要准备SDTM Package时,我们又要将.sas7bdat文件批量转换成.xpt文件。

  1. xpt2sas.sas
代码语言:javascript复制
/*SAS文件路径*/
libname sdata "/home/users/zenga/code/sas/";

/*XPT文件路径*/
%let dir=/home/users/zenga/code/xpt/;

filename xpts pipe "ls &dir.*.xpt";

data _null_;
    infile xpts truncover;
    input;
    XPTFILE=prxchange('s/(. )/(. )(.xpt)/2/',-1, _INFILE_);
    call execute('libname xptin xport "&dir.'||strip(XPTFILE)||'.xpt";'
                 ||'proc copy in=xptin out=sdata mt=all; run;');
run;

filename xpts clear;
 
  1. sas2xpt.sas
代码语言:javascript复制
/*XPT文件路径*/
%let dir=/home/users/zenga/code/xpt/;

proc sql;
    create table vtable as
        select * 
        from dictionary.tables
        where LIBNAME='SDATA'
        ;
quit;

data _null_;
    set vtable end=eof;
    MEMNAME=lowcase(MEMNAME);
    call execute('libname temp xport "&dir.'||cats(MEMNAME)||'.xpt";'
                 ||'data '||cats(MEMNAME)||'(sortedby=_null_ label="'||cats(MEMLABEL)||'"); set sdata.'||cats(MEMNAME)||'; run;'
                 ||'proc copy in=work out=temp mt=data; select '||cats(MEMNAME)||'; run;');
    if eof then call execute('libname temp clear;');
run;
 

对于第一个程序xpt2sas.sas,获取某一路径下某种文件的文件名也可以用CALL SYSTEM,不过这种方法会产生一个临时文件,所以推荐使用FILENAME PIPE。

0 人点赞