美文网首页SAS编程
199:工作中导入外部EXCEL文件常用的方法以及各种状况说明

199:工作中导入外部EXCEL文件常用的方法以及各种状况说明

作者: SASPRO的打工人生活 | 来源:发表于2023-03-01 22:58 被阅读0次

    做项目,有时候需要导入外部EXCEL数据作为我们的补充数据集,常见的比如血药浓度、还有一些免疫细胞检测那些。

    你们可能好奇为什么是通过外部文件导入的方法,而不是记录在对应的数据集里面?比如CRF上都设计了采集血药浓度的Form,为什么检测结果是通过外部文件传输呢?

    一般来说,采集血药浓度,采集的时间、时间点是记录在CRF上,所以我们在数据集就能看到某某受试者什么时间采集了血药浓度,但是血药浓度、细胞这些检测不是进行临床试验的医院能够做的,而是要送去专门的检测机构进行检测,之后他们再将检测结果传输给我们。所以我们处理这些数据集的时候,一般都是通过受试者、采集时间点进行拼接。

    需要注意的是,采集的时间检测的时间是不一样的,我这不一样说的不是时间跨度上的不一样,而是某些domain,IG上规定这个变量记录的就是采集时间,而不是检测时间,所以当两个日期都有的时候,需要注意哪个放在对应的变量上,这是挺容易忽略的一点。

    当外部文件传输给我们之后,有的公司会要求先对外部数据进行QC,就是mian侧将外部文件导成数据集,QC也将外部文件导成数据集,之后对数据集进行QC, 说实话,我觉得并不是多上了一层保险。

    其他的不说,直接讲我们常用的导入外部文件会出现的状况吧。

    我们导入外部文件,最常用的就是proc import了,先看下外部数据,有好几种情况:有数字和字母混合在一起的,有小数点后面是0的(建议大家导出成数据集的时候跟源数据保持一致,就是这个0也保留下来),有百分号

    如果数据正常显示的话,我们直接用proc import 加上dbms=xlsx导入

    proc import datafile="D:\Practice\test.xlsx"

        out=pc_pk

        dbms=xlsx replace;

        range="sheet1$A1:";

        getnames=yes;

    run;

    ①:看log,显示EXCEL里面的列名发生了改变,SAS有时候很奇怪,有时候EXCEL里面的列名能正常显示,也就是说这些“方案编号”、“受试者”也能作为我们数据集的变量名,不知道怎么对中文变量名进行处理的读者,用

    '方案编号'n  就能进行正常的变量名处理了,比如rename,keep那些。

    但是我还是强烈建议大家不要用getname=yes,因为这次EXCEL文件能输出中文变量名,下次就会像这个log显示的一样,变量名发生了变化,如果你的程序是通过中文变量名进行数据处理,也就是说发生了上面的情况你还要去修改程序,那纯属浪费时间了,我已经吃过好几次亏了,所以,听话。

    ②:然后发现最后一列小数点后面的0消失了,如上面所说,外部文件是什么样子,我们导出成数据集的时候就输出成什么样,也就是这个0也保留下来,那么如何实现呢?

    我们可以通过proc import + DBMS=EXCEL + mixed=yes

    如果你想用mixed的话,上面的DBMS必须是EXCEL,而不是xlsx了,而且不能再写成range="sheet1$A1:";这种格式了,而是要改成sheet="sheet1";

    proc import datafile="D:\Practice\test.xlsx"

        out=pc_pk

        dbms=excel replace;

        sheet="sheet1";

        getnames=yes;

    run;

    发现有点面目全非了,发现我忘记加上了mixed=yes;加上后发现数据展示的很完美,所以建议大家如果有中文、字母、数字混合的excel文件,还是用这种方法。

    而且发现用dbms=excel和dbms=xlsx,不用getname=yes的话,dbms=excel输出的列名是F1,F2,F3......而dbms=xlsx输出的是VAR1,VAR2,VAR3......这个也是需要注意的一点

    ③:有时候我们自己计算的PK参数,从winnolin导出的时候,发现值是科学计数法,导入到数据集里面也是一样的,这个时候对EXCEL进行一些设置可以显示为正常的数字。

    找到这个地方,一个个点下去,都是默认选项,之后选中你需要转换科学技术法的列,格式选择文本,就能正常显示数字了,导入到数据集里面也是正常的数字。

    需要和大家讨论的是,如果外部文件发过来是科学计数法,我们这样处理,算是改变数据吗?但是将科学计数法的数据导入到数据集,然后进行一系列处理输出成正常的数据,我觉得也存在精度缺失的问题,还不如提前在EXCEL里面处理,欢迎给出您宝贵的意见。

    为什么SAS导入EXCEL会出现上面的各种各样的情况,我没有做深入研究,感兴趣的自己去SAS官网查下吧。

    相关文章

      网友评论

        本文标题:199:工作中导入外部EXCEL文件常用的方法以及各种状况说明

        本文链接:https://www.haomeiwen.com/subject/psmdldtx.html