前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.sas7bdat文件与.xpt文件批量转换

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

作者头像
专业余码农
发布2020-07-16 10:16:39
3.4K1
发布2020-07-16 10:16:39
举报
文章被收录于专栏:老Z的博客老Z的博客

当我们拿到的原始数据为.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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档