1 SAS传输文件格式定义SAS传输文件格式是SAS公司(SAS InstituteInc.)公开发布的用于数据交换的***格式,扩展名为xpt。所有字符数据都存储在ASCII中,不依赖于任何操作系统。所有整数的存储都使用IBM代***风格的整数格式,所有浮点数的存储都采用IBM代***风格的双精度。用于支持在不同的操作系统和环境之间以及SAS软件的不同版本之间的数据传输。可以使用不特定的软件转换成其他各种数据格式。
2 SAS传输文件格式分类2.1 按照SAS程序分类可以使用PROC CPORT过程将SAS数据集(DATA SET)创建为SAS传输文件并使用PROC CIMPORT过程还原,但使用XPORT引擎无法还原。也可以将XPORT引擎与DATA步或PROC COPY过程联用将SAS数据集创建为SAS传输文件并还原,但使用PROC CIMPORT过程无法还原。因此,使用PROC CPORT创建的SAS传输文件格式与使用XPORT引擎创建的SAS传输文件格式之间不可相互转换。
2.2 按照SAS版本分类SAS V5传输文件格式是SAS公司早期开发的传输文件格式的代表,广泛应用于生物制药行业,与SAS V6传输文件格式兼容。SAS V8传输文件格式是SAS公司近期开发的传输文件格式的代表,扩展了SAS V5传输文件格式的功能,与SAS V7/V9传输文件格式兼容。
2.3 不同分类之间的关联PROC CPORT和PROC CIMPORT过程可创建和还原SAS V8传输文件格式,同时兼容SAS V5/V6/V7/V9传输文件格式。XPORT引擎与DATA步或PROC COPY过程联用可创建和还原SASV5传输文件格式,同时仅兼容SASV6传输文件格式。
3 SAS传输文件格式特征3.1 SAS V5/V6传输文件格式特征变量名的长度最多可达到8个字符,变量名不能完全为空;变量标签的长度最多可达到40个字符;字符变量的长度最多可达200个字节。
3.2 SAS V7/V8/V9传输文件格式特征变量名的长度最多可达到32个字符,除非使用“VALIDMEMNAME=EXTEND”选项,否则变量名不能完全为空;变量标签的长度最多可达到256个字符;字符变量的长度最多可达32767个字节。
convert the XPORT file back to a SAS dataset using proc step;
libname xptfile xport "D:\DLG\2021Receiving\20210419sas的project\DEMO_I.XPT";
libname sasfile "D:\DLG\2021Receiving\20210419sas的project\";
proc copy in=xptfile out=sasfile memtype=data;
run;
proc print data=sasfile.demo_i;run;
*convert the XPORT file back to a sas dataset using data step;
 libname in xport "D:\DLG\2021Receiving\20210419sas的project\DEMO_I.XPT";
data sasfile.wave1;
set in.DEMO_I;
run;
%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(C:\your source folder\,xpt,C:\your destination folder\)