中国队世界杯_2014世界杯德国 - dyhdcw.com

SAS导入外部excel文件时几种方式,以及getnames=YES与getnames=NO区别

在SAS撰写AE.CM.MH.PR数据集过程中,经常牵扯到外部导入EXCEL文件,用什么格式导入,如何正确导入,牵涉到读入进去的变量名,规范合规。

对于后缀为.xls格式的文件,有两种:

一种是proc import过程的dbms=xls,一种是proc import过程的dbms=excel。

对于后缀为.xlsx格式的文件,有两种:

一种是proc import过程的dbms=xlsx,一种是proc import过程的dbms=excel。

这两个格式的文件,用两种导入格式进行导入各自有什么区别呢?让我们来演示一下:

1.1xls文件用xls格式

日志报错

xls文件中是存在"肿瘤-放射治疗史"sheet的,因此xls用xls读取不同

1.2xls文件用excel格式

日志不报错

导入成功之后的变量名是按照col1开头一次往下排序进行的

此时,从这个文件中导入的字符就是字符型,数值型就是数值型。

如果改变此时的getnames=no,结果变成下图,

第一行的列名不会读取进来,列名显示的是F开头依次往下排序,但是有个bug就是xls文件有些列标头识别不了,用句点表示的

此时的导入,依然是文件是字符型就是字符型,文件是数值型就是数值型。

假如我们想要导入的文件,都将所有列变为字符型,那么xls就不可以实现,需要将此文件另存为.xlsx后缀的文件,不可以直接修改后缀名称,会导致文件损坏。

2.1后缀.xlsx文件用dbms=xlsx格式导入。

xlsx文件用xlsx后缀导入,虽然不报错,但是日志提示列变量均变为了字符型

在一些导入外部文件做PT/PTCD/HLT/HLTCD的编程中,方便统一编程,而不至于有的字符型有的数值型。

导入之后的数据集变成了以VAR开头依次的列名,列名称读取进去了,只不过这里显示的是变量名

如果getnames=NO,

此时数据集列名变成了excel文件的形式,且跟上面日志报错一致,都是提示转为了字符型

2.2后缀.xlsx文件用dbms=excel格式导入

1.getnames=yes

日志并没有提示跟.xlsx文件用dbms=xlsx文件导入的格式一样,转为字符型,而是依然是字符型是字符型,数值型是数值型,且类似于上面1.2过程

如果改为getnames=no,结果依然没有提示转为字符型。结果类似于.xls文件用EXCEL转换——有的列名显示不出来。

因此综上1.1-2.2所述结果,若想再导入外部文件的过程中省时省力:那么最好以.xlsx文件格式结尾,以.xlsx格式进行导入,getnames=no 将所有变量转为字符型,如下图展现的结果。

Tips:另外,在撰写本篇文章过程中发现,当类似的excel文件打开之后再用proc import过程导入,日志均提示文件已经在使用中,而当DBMS=EXCEL过程时,确可以正常导入,且文件打开与否均能正常导入。

另外,如果大家每次导入外部excel文件或者读取sdtm specs时候,每次关闭都很麻烦,那就要把excel文件设置成共享,亲测有效!!这样无论文件打不打开均可以导入了。

分享:用相对路径导入外部的一些文件。

1.用这段代码,放在一个程序里,保存在m5 sdtm某个程序文件夹下,会获取路径信息

%macro pathfind;

%if %length(%sysfunc(getoption(sysin)))>0 %then %do;

/* Batch Execution */

%sysfunc(getoption(sysin))

%end;

%else %do;

/* Interactive Execution */

%sysget(SAS_EXECFILEPATH)

%end;

%mend pathfind;

%LET _SASPROGRAMFILE = -%pathfind;

%LET m5=%substr(&_SASPROGRAMFILE,2,%INDEX(&_SASPROGRAMFILE.,\tabulation)-2);

2.命名第二级名称,并通过二级名称,创建三级名称

3.命名相对路径文件与名称,定义宏变量为全局宏变量

4.这样每次导入的时候直接调用,这个全局宏变量名称就行

完。

Copyright © 2022 中国队世界杯_2014世界杯德国 - dyhdcw.com All Rights Reserved.