SAS初学者笔记---003---利用数据步读取数据--从文件中读取数据

SAS初学者笔记---003---利用数据步读取数据--从文件中读取数据
接上一篇文章,接下来开始介绍从文件中读取数据

从文件中读取数据

虽然说从文件中读取数据的本质上都是INFILE语句的使用,但是作为小白玩家,掌握从文件窗口直接导入数据还是很有必要的。
接下来就开始吧。

从窗口导入文件

本标题所指窗口,意为sas软件的窗口,如下红色箭头所指
SAS初学者笔记---003---利用数据步读取数据--从文件中读取数据
SAS初学者笔记---003---利用数据步读取数据--从文件中读取数据
SAS初学者笔记---003---利用数据步读取数据--从文件中读取数据
SAS初学者笔记---003---利用数据步读取数据--从文件中读取数据
SAS初学者笔记---003---利用数据步读取数据--从文件中读取数据

LOG窗口出现如下字样时提示文件导入成功
SAS初学者笔记---003---利用数据步读取数据--从文件中读取数据
以上便是导入的数据
SAS初学者笔记---003---利用数据步读取数据--从文件中读取数据
变量读取时出现了一个小错误,目前我还不太清楚是为什么,希望走过路过的大佬能指点一下

另外,在导入时需要确定你的sas版本所支持的数据格式,如笔者使用的sas版本为9.1.3,如图可见其支持以上格式的数据,
选中格式进行文件导入后,一般会进行两步

  • 确定待导入文件的位置(路径)
  • 确定sas文件保存路径
    一般来说,数据经过这两部都能成功的导入到数据集中,但前提是你的数据格式能满足导入需求。多数情况会遇到以下问题:
  • sas不支持数据的格式,这个问题需要通过外部软件将数据文件进行转码成相应的格式,例如xls文件转为csv文件
  • 导入后生成的数据集有乱码、缺失值、行列信息错误,这个需要根据生成的sas文件特定地修改代码
  • 导入超大型文件,这个问题比较重要,笔者会单独写一篇文章讲述

INFILE语句的用法

还记得我们在上述操作中保存的sas文件吗,让我们打开来看看

PROC IMPORT OUT= WORK.STUDENT1 
            DATAFILE= "D:\sas\笔记\student1.csv" 
            DBMS=CSV /*提示文件类型为CSV*/ REPLACE /*替换同名文件*/;
     GETNAMES=YES; 
     DATAROW=2; 
RUN;

这里用到了IMPORT语句读取文件,同时我们可以用INFILE语句读取此csv文件

分隔符及选择读取

SAS初学者笔记---003---利用数据步读取数据--从文件中读取数据

DLM 指示文件分隔数据的方式,如csv文件使用逗号分隔数据,xls文件使用制表符(tab)分隔数据
FIRSTOBS=2 指示从第二行开始读取数据(区别与通常认识的编程语言,以0 1 2 3的方式排序,懂的都懂)
OBS=10 指示数据读取从第十行结束

FLOWOVER TRUNCOVER MISSOVER PAD 的使用方法

之前有提到过按列读取数据的代码,如下所示
SAS初学者笔记---003---利用数据步读取数据--从文件中读取数据
同样的,我们用INFILE语句来读取这一类型数据
SAS初学者笔记---003---利用数据步读取数据--从文件中读取数据

FLOWOVER

SAS初学者笔记---003---利用数据步读取数据--从文件中读取数据
对比一下在数据阵列中读取,是不是哪里不太对劲
这提示我们sas使用INFILE读取数据时,默认的读取方式是FLOWOVER,这个和之前写到的有关INPUT读取变量的逻辑有一点相似
情况是这样的:
程序按照指定格式从文件中读取变量,当本行数据无法满足某变量的读取要求时(如长度不足),程序就会从下一行数据中读取此变量。这样就可以解释以上现象,这也是FLOWOVER的含义

MISSOVER

SAS初学者笔记---003---利用数据步读取数据--从文件中读取数据
MISSOVER的含义是:读取变量时若某变量的读取无法被满足,则将此变量标记为空值,而不是从下一行数据中读取变量,但是city变量中只有长度最长的chongqing被读取到了,其他未读满的值都被标记为了空值

PAD

如果在代码中加入pad语句
SAS初学者笔记---003---利用数据步读取数据--从文件中读取数据
情况一下就明朗了,PAD的原理是在读取数据时在每一行尾用空格补齐数据至最长,所以可见数据被完整的读取出来了,文件中未被指示的数据即被读取成了空值。
但是,问题又来了,如果不按列读取会怎么样?
SAS初学者笔记---003---利用数据步读取数据--从文件中读取数据

果然,数据读取又出现了错误。细心的朋友可能会观察到和最开始讲述FLOWOVER的原理时所指示的结果十分相似,我们或许可以试试再加上MISSOVER语句。
SAS初学者笔记---003---利用数据步读取数据--从文件中读取数据
可以看到在联用了MISSOVERPAD语句后,数据读取又变成了我们想要的样子。可见 PAD语句是不会阻止FLOWOVER语句生效的,但是MISSOVER会。

TRUNCOVER

事实上上述案例也就是TRUNCOVER功能的拆分,如下
SAS初学者笔记---003---利用数据步读取数据--从文件中读取数据
上述文件中未调整city变量的长度,所以会出现读取不全的结果,请谅解,谢谢

小结

本节介绍了如何从文件中读取数据,下一节将介绍如何建立逻辑库、读取已生成的数据、对变量的删改等操作
本文参考了 imasaor的博文-终于总结了一下,truncover,missover, pad选项的意义,以及读取datalines和外部文件的不同。
(考完就发下一节,大概。。)

上一篇:Java_00_003-补充_常用标识符词汇


下一篇:SQL-003查询出批次档案中重复且有库存的批次信息