XPT 转SAS

xpt是临床数据传输文件常用格式,本文提供SAS版本5(V5)、版本9 (V9)格式转换为sas格式的宏代码。

SAS V5

SAS版本5(V5)传输文件格式是SAS开发的一种开放标准,用于支持系统之间(尤其是运行不同操作系统的系统之间)的数据传输,也是目前常用的文件格式。

%macro drive(dir,ext,out);                                                                                                                  
  %let filrf=mydir;                                                                                                                      
  %let rc= %sysfunc(filename(filrf,&dir));                                                                                                
  %let did= %sysfunc (dopen(&filrf));                                                                                                      
  %let memcnt= %sysfunc (dnum(&did));                                                                                                      
   %do i = 1 %to &memcnt;                                                                                                                
     %let name= %qscan (%qsysfunc (dread(&did,&i)),-1,.);                                                                                   
     %if %qupcase( %qsysfunc (dread(&did,&i))) ne %qupcase (&ext) %then %do ;                                                                  
     %if ( %superq(ext) ne and %qupcase (&name) = %qupcase (&ext)) or                                                                       
         ( %superq (ext) = and %superq (name) ne) %then %do;   
       libname old xport "&dir.\%qsysfunc(dread(&did,&i))" ;
             libname new "&out" ;
             proc copy in =old out=new;
             run ;
     %end;                                                                                                                               
   %end;
  %end;
  %let rc= %sysfunc(dclose(&did));                                                                                                        
%mend drive; 
 ************以上为宏代码***********************%drive(D:\lining\sdtm,xpt,D:\lining\sdtm\sdtmsas) /* xpt存储文件夹,转换的sas存储文件夹*/

从SAS 9.3开始,可以使用%LOC2XPT,%XPT2LOC和%XPTCOMMN宏读取或写入V5传输格式的文件。

SAS V8、V9

V8、V9版本,文件后缀是不一样的,比如 .v9xpt。可用的宏为%XPT2LOC。

以下代码需使用unicode版本的SAS

单个xpt转换为sas格式

libname sdtmsas "'D:\lining\sdtmsas"; /*转换的sas存储文件夹链接物理位置*/
%xpt2loc(libref=sdtmsas, memlist=ae,
        filespec='D:\lining\sdtm/ae.xpt');/*xpt文件所在物理位置*/

V8、V9格式批量转换

%let path=D:\lining\sdtm;/*xpt文件夹所在物理位置*/
filename xptfiles pipe "dir /b ""&path\%str(*).xpt"" " ;
filename code temp;

data files;
  infile xptfiles truncover;
  input filename $100. ;
  file code;
  put '%xpt2loc(libref = sdtmsas, memlist = _all_, filespec = ''' "&path" '\' filename +(-1) ''')';
run;

libname sdtmsas 'D:\lining\sdtmsas'; /*转换的sas存储文件夹链接物理位置*/
%include code/ source;

带格式的xpt转换

%macro xpt2sas(DsPath=);
filename DsList pipe "dir ""&DsPath.\*.xpt."" /b";

data DsList;
	infile DsList truncover;
	length result  FileName xpt ds $2000;
	input result;
	FileName=scan(result,-1,"\");
	xpt="&DsPath.\"||scan(filename,1,".")||".xpt";
	ds=scan(filename,1,".");
	keep FileName xpt ds;
run;

data _null_;
	set DsList;
	call execute ('libname __xpt__ xport '||quote(strip(xpt))||";");
	call execute ('proc copy in=__xpt__ out=work noclone; select '||strip(ds)||'; run;');
run;

proc format cntlin=formats library=work;
run;

%mend xpt2sas;

proc datasets library=work kill noprint;quit;
dm  'out;clear;log;clear;'; 
%xpt2sas(DsPath=E:\review\Susoctocog alfa\data\sdtm)
libname sdtmsas 'E:\review\Susoctocog alfa\data\sdtmsas';
PROC DATASETS LIBRARY=work;
COPY OUT=sdtmsas;
QUIT;


proc datasets library=work kill noprint;quit;
dm  'out;clear;log;clear;';
%xpt2sas(DsPath=E:\review\Susoctocog alfa\data\adam)
libname adamsas 'E:\review\Susoctocog alfa\data\adamsas';
PROC DATASETS LIBRARY=work;
COPY OUT=adamsas;
QUIT;

你可能感兴趣的:(SAS,SAS,code)