第一步 xpt转换位xlsx
首先准备xpt文件,放在一个目录下。
将以下内容保存进 exprotXlsx.sas 文件中
/* 将xpt文件导入sas软件中 */
LIBNAME XP XPORT "F:\sasTest\ADPR.xpt";
PROC COPY IN=XP OUT=WORK;
RUN;
/* 将导入的work导出为xlsx文件 */
filename output 'F:\sasTest\ADPR_YS.xlsx' encoding="utf-8";
PROC EXPORT DATA=WORK.Adpr OUTFILE=output
DBMS=XLSX REPLACE;
PUTNAMES=YES;
RUN;
/* 将导入的work导出为xlsx文件(翻译文件) */
filename output 'F:\sasTest\ADPR.xlsx' encoding="utf-8";
PROC EXPORT DATA=WORK.Adpr OUTFILE=output
DBMS=XLSX REPLACE label;
PUTNAMES=YES;
RUN;
注意点
- 为什么要导出两份不同xlsx文件呢?因为sas软件属性中有name和label,如果我们导出有label的xlsx,翻译完成后,xlsx再转换回Xpt时,sas脚本需要原始xpt文件进行比较,这时两者的name比对不上,就导致无法转换,即便我们导入到sas软件中,它依然是有问题。
![HDOSMCKZ0K3A}}@L%9LGEJ.png
label就是我们要进行翻译的标题,所以xlsx转换回xpt,需要使用sas脚本中修改label命令。
![0$RL]UWRCLW{C_E({1SD)W.png
第二步 xlsx转换xpt
/* 将xpt文件导入sas软件中 */
LIBNAME XP XPORT "F:\sasTest\ADPR.xpt";
PROC COPY IN=XP OUT=WORK;
RUN;
/* 将翻译好的xlsx导入sas软件 */
PROC IMPORT OUT= WORK.ADPR_PR
DATAFILE= "F:\sasTest\ADPR_YS.xlsx"
DBMS=EXCEL REPLACE;
RANGE="ADPR_YS";
GETNAMES=YES;
MIXED=YES;
SCANTEXT=YES;
USEDATE=NO;
SCANTIME=NO;
RUN;
LIBNAME sasfile "F:\sasTest";
LIBNAME xportout xport "F:\sasTest\ts.xpt";
/* 转换work中label */
DATA xportout.ts;
length STUDYID $11.;
format STUDYID $11.;
informat STUDYID $11.;
set work.ADPR_PR;
label STUDYID="研究标识符"
USUBJID="受试者唯一标识符"
SUBJID="筛选号";
RUN;
/* 将work转换为xpt文件 */
PROC COPY in=sasfile out=xportout memtype=data;
RUN;
运行后结果