zoukankan      html  css  js  c++  java
  • SAS | 数据读取高阶方法

     

    1 在INFILE语句中使用选项控制输入(infile选项)

    infile语句中的选项,放在infile语句中文件名的后面,可以改变SAS读取原始数据文件的方式,对于读取特定类型的数据文件非常有用。
     
    FIRSTOBS=

    用于告知SAS是从第几行开始读取数据。这对于哪些在开头有描述性文本和头信息的数据文件非常有用。
     
    OBS=

    用于告知SAS读取到数据文件哪一行时停止。「OBS=」选项常和「FIRSTOBS=」选项一起使用,以便从数据文件的中间读取文件
     
    MISSOVER

    默认情况下,SAS读完一行数据后,如果input语句中还有一些变量没有赋值,SAS将会在下一数据行读取数据。「MISSOVER」选项会告知SAS:当一行数据读完的时候不要转到下一行,而是为其余的变量分配缺失值。
     
    TRUNCOVER

    当你使用列输入或者格式输入读取数据时,并且一些数据行比其他行短的时候,你需要使用「TRUNCOVER」选项,该选项作用时告知SAS为变量读取数据,直到遇到数据行的结尾,或者遇到了在格式或列范围指定的最后一个列。二者以先遇到者为准。

    TRUNCOVER 和 MISSOVER 类似,要注意区分:

    • 联系:如果数据行在变量作用域开始之前就结束,它们都会为变量分配缺失值
    • 区别:如果数据行在变量作用域中间结束,TRUNCOVER 将尽量读取可用数据,而MISSOVER 会直接为变量分配一个缺失值

     

    2 使用DATA步读取分隔文件(infile选项)

    分隔文件是一种使用特殊字符分隔数据值的原始数据文件,通常使用逗号(,)或制表符(Tab)作为分隔符,SAS为infile语句提供了连个使其更容易读取的选项:DLM= 选项和 DSD 选项。

     
    DLM=选项

    若期望读取的数据文件分隔符是空格,则可以使用列表输入读取数据。但若是其他分隔符,这时就需要使用infile语句中的DELIMITER=DLM= 选项,来读取使用任意分隔符的数据文件,只需要把分隔符方在 DLM= 选项后面的等号中(如 DLM='&')。如果分隔符是一个字符串,则使用 DLMSTR= 选项。

    示例:infile 'D:code est.dat' DLM = ',' ;

    注意,若分件使用制表符(Tab)分隔,则 DLM='09'X (ASCII码)。

     
    DSD选项

    默认情况下,SAS将两个或更多的连续分隔符解释为一个分隔符。如果你的文件有缺失,且连续两个分隔符代表缺失值,那么将使用到infile语句中的DSD选项(分隔符敏感数据),它有三层作用,并可以配合 DLM= 选项使用。

    • 忽略用引号括起来的数据值中的分隔符
    • 不会把引号作为数值的一部分读取
    • 把两个连续的分隔符视为缺失

    示例:infile 'file - specification' DLM = '09'X DSD ;

     
    CSV文件

    逗号分隔符文件被称为CSV文件,针对这类文件,通常采用DSD选项来进行读取。但存在一种特殊情况:在数据行的末尾可能出现缺失值,这时就需要 DSD选项MISSOVER选项 连用,告知SAS当一行数据不够时,不要跳到下一行继续读取。

    示例:infile 'D:code est.csv' DLM = ',' dsd missover ;

     

    3 使用IMPORT过程读取分隔文件(import)

    SAS中通常有不止一种方法来达到相同的结果

    前面已经学习过使用DATA步读取分隔文件,接下来学习的IMPORT过程,也能实现同样的结果。

     
    PROC IMPORT

    import过程会自动扫描数据文件前20行,以自动确认变量类型(数值型或字符型)。它还能为字符型指定长度及识别一些日期格式。同时,proc import 会把数据文件中连续的分隔符视为缺失值,读取引号中包含的数据值,以及当数据读完的时候为其余的变量分配缺失值。而且,可以根据需要,把数据文件中的第一行作为变量的名称。

    示例:proc import datafile = 'filename' out = data-set ;

    filename是想要读取文件的名称,data - set是要创建的SAS数据集的名字。同时,SAS将通过文件的拓展名来确认文件的类型:

    文件类型 拓展名 DBMS 标识符
    逗号分隔的 .csv CSV
    制表符分割的 .txt TAB
    使用其他分隔符分隔的 DLM

    如果文件没有适当的拓展名,或文件是某种DLM类型,则必须再 proc import 中使用 DLMS= 选项。如果已经有一个和 out= 选项中同名的SAS数据集,并且想要覆盖它,则需要使用 REPLACE 选项。

    proc import datafile = 'filename' out = data-set
    	 dbms = identifier replace ;
    

     
    可选语句

    一些文件类型需要用一些额外的指令才能正确读取。

    • 如果数据文件不是在第一行,可以使用 DATAROWS 语句
    • 如果分隔符号不是逗号、制表符或者空格,可以使用 DELIMITER 语句
    • 如果文件只包含数据,没有标题行,可以使用 GETNAMES=NO 语句分配默认的变量名称
    • 如果数据在前20行全是缺失值或者没有代表性的数据,可以使用 GUESSINGROWS 语句,以确保变量被分配了正确的数据类型和长度
    datarows = n;                         /* 从第n行开始读取数据,默认是1 */
    delimiter = 'delimiter-character';    /* DLM文件的分隔符,默认是空格 */
    getnames = no;                        /* 不要从输入文件的第一行获取变量名称,默认yes;如果是no,变                                          量名称为var1、var2、var3等 */
    guessingrows = n;                     /* 使用n行来确定变量的类型,默认20 */
    
    proc import datafile = 'D:code	est.csv' out = music replace;
    run;
    

     

    4 使用IMPORT 过程读取Excel文件(import)

    在SAS中可以使用 PROC IMPORT 过程来读取Excel文件,需要注意的是 import 过程在不同的系统中(windows和unix)用法有一些区别:

    使用import过程读取Excel文件一般形式:

    proc import datafile = 'filename' out = data-set
    	 dbms = identifier replace ;
    

    其中filename是要读取的文件;data-set是要创建的SAS数据集名称;replace选项是告诉SAS替换 out= 选项中指定的数据集(若存在的话)dbms= 选项告知SAS要读取的Excel文件类型,但它不是必需的。

     
    DBMS 标识符

    三种最常用的标识符是excel、xls、xlsx。

    • unix系统中:xls用于读取文件(拓展名.xls);xlsx用于读取文件(拓展名.xlsx)
    • windows系统中:xls、xlsx的用法同unix,并且多了excel标识符,可读取所有类型的excel文件

    需要区分的是,excel标识符使用了不同的读取技术,所以结果可能会有所不同。默认情况下,xls、xlsx标识符相较于excel会查看更多的数据行来确定列的类型。

     
    可选语句

    如果文件中有多个工作表,可以使用 SHEET 语句指定要读取那个工作表。

    语法:sheet = "sheet-name" ;

    如果只想读取工作表中特定的单元格,可以用 range 指定一个区域。该区域可以是命名区域(如果已定义),或者可以安装以下方式指定所在预取的左上和右下单元格。a

    语法:range = "sheet-name$UL:LR" ;

    默认情况下,import过程使用电子表格的第一行作为变量的名称。如果你不想这样做,可以向该过程添加 GETNAMES 语句(仅限excel标识符),SAS会将这些变量命名为F1、F2等。

    语法:getnames = no ;

    当使用excel标识符时,如果有一列同时包含数值和字符值。默认情况下,数值将被转换成缺失值。为了将数值读取成字符类型而不是缺失值,可以使用 MIXED 语句。

    语法:mixed = yes ;

    proc import datafile = 'D:code	est.csv' dbms = xls out = music replace;
    run;
    
  • 相关阅读:
    git的命令操作指南
    【flask】RestFul的基本鉴权
    linux断电修复
    centos7安装libreoffice
    java -jar 后台启动
    yum安装nginx
    rpm安装mysql
    yum安装redis
    Centos 修改yum源
    centos8安装node.js v12.18.3
  • 原文地址:https://www.cnblogs.com/1k-yang/p/12141972.html
Copyright © 2011-2022 走看看