• SAS学习2(data步,input语句,从文件中读取数据)


    数据步中最复杂的是INPUT语句

    在这里插入图片描述

    data语句

    data是数据步开始的语句
    数据集名可以写成逻辑库名+点+数据集库名
    一个会话,可以建立多个数据集,最后建立的数据集是当前数据集
    不需要数据集的时候,数据集用_NULL_名字定义
    在这里插入图片描述

    DATALINES相当于cards,用来定义内置数据,完全等价
    这里在过程步中输出的时候,输出的是当前数据集,也就是最后创建的数据集score;要输出student数据集,需要指定
    在这里插入图片描述

    在这里插入图片描述
    提交以上代码,显示如下,只在日志中显示了结果值:
    在这里插入图片描述

    第一句逻辑库ep,对应的物理路径,这样建立的数据集就可以在磁盘上存在,下次可以直接使用
    数据集是ep底下的students数据集
    在这里插入图片描述

    input语句

    定义或者描述如何读入数据
    多个数据项描述用空格分割开
    在这里插入图片描述
    在这里插入图片描述

    列表输入

    列表输入这种方法,数据必须是空格分割
    在这里插入图片描述

    列输入

    这里1-18表示数据所在的字符位置
    这里可以看到可以根据位置重复读取一行的数据
    age变量是用date()这个函数获取当前时间,然后用year()函数获取年份
    在这里插入图片描述

    如果要写input,必须要有输入,或者是cards,或者是infile
    这里看到不区分大小写
    在这里插入图片描述

    格式化输入

    变量名后面指定输入格式,前面可以加上修饰符
    mmyydd10固定写法,表示10位的时间格式,月日年加起来6位,两个分隔符加起来8位(PPT里写错了,书上是8)
    weight表示整体有4位宽,小数点后保留一位
    在这里插入图片描述
    在这里插入图片描述

    这里看到,读出来的日期,是一个数字,而不是直接显示的年月日,应该是计算的某一天到输入日期的天数;
    另外,读体重的时候,是小数点,SAS中小数点的读取是从后向前的,因此对于63,先读到3被作为小数点后的部分,就会被读成6.3;640读成64.0,这个比较奇怪
    在这里插入图片描述

    输出时间格式的时候,需要用format定义worddate. 格式
    这里特别注意,这个格式后面要加个.,如果不加是没有效果的
    在这里插入图片描述

    格式列表

    格式列表用于变量多且格式相似的情况
    score1到score5五个变量
    第三个列子少了个s
    在这里插入图片描述

    用&修饰符解决数据中出现一个空格的问题
    在这里插入图片描述

    指针控制

    行指针可以跨行读取
    在这里插入图片描述

    绝对指针,指针位置是绝对的,表示这一行的哪一列
    数值型就是第几列

    第一个例子,从15列开始读sales变量,变量长度是5
    第二个例子,用A变量来代替数字,其实和1没有区别
    第三个例子,表达式算出来整数

    下面这个例子,读到两个变量的值,一个是grade 67,一个是A 123
    在这里插入图片描述

    字符型指针工作方式类似于搜索
    字符串也是用单引号
    这里从size=后面开始读取,这里第一行读取到的就是343,第二行读取到的就是123

    在这里插入图片描述

    第一个例子,先从23位置读入length,4个长度,加起来是27
    然后从27+5开始,读width

    在这里插入图片描述

    /表示将指针移到当前行的下一输入行的第一列
    #3 表示跳转到第三行
    第一个例子中,可以看到每一次读取数据需要读三行,那么第二次读取的时候就是从第四行开始(但是行号会被重置,相当于将已经读入的前三行忽略掉)

    第二个例子中,最后跳到了第四行但是没有任何操作,这个是告诉程序后两行相当于空行

    第三个例子,读完grade变量,到第二行读取五个变量
    在这里插入图片描述

    行尾随符,可以保持读数据不换行
    在这里插入图片描述
    在这里插入图片描述

    定义内置数据
    如果某行数据少于变量个数,那么读取的时候就会跳到下一行去继续读取数据,导致数据混乱,所以需要进行处理
    infile datalines MISSOVER语句用于表示数据不足时,按照缺失值填充,而不去跳到下一行读取
    missover:当每行数据个数不一致时,有的变量可能没被赋值,missover告诉sas将这个变量赋为缺失值
    在这里插入图片描述

    封号一般用于结束数据,如果数据中有封号,那么用这条语句
    这时,数据结束用四个封号结束
    在这里插入图片描述
    在这里插入图片描述

    length

    在这里插入图片描述

    label

    输出的时候打印别名
    在这里插入图片描述

    lostcard

    这里每次两行读取数据,但是第三组数据会出现问题,丢掉了第一行数据
    如果不做处理的话,后面的行都会出现错误

    这里判断条件是如果id不等于(NE)idcheck,那么就表示丢失数据了,不读取
    在这里插入图片描述

    在这里插入图片描述

    informat/format

    在这里插入图片描述

    missing

    如果没有missing这个语句的话,如果遇到第二行数据,因为是R,而不是数值形的变量,所以sas会将这个值处理成小数点,即缺省值
    加上missing,指定数据缺失的原因,从而可以加入到数据集中

    这个用N R表示缺项值的代表符号

    这个作用是,比如调查一个人的回答,n就表示没有这个人,r就表示拒绝回答之类的;表示对缺项值进行说明,说明什么原因导致了缺项
    在这里插入图片描述

    注释语句:

    单条语句用 * 号,多行用 /* … */
    在这里插入图片描述

    options语句

    改变系统设置
    在这里插入图片描述

    从外部文本文件读取数据

    在这里插入图片描述
    在这里插入图片描述

    从现有数据集读取数据

    在这里插入图片描述

    从excel表单读取数据

    从这里指定读入数据的类型,以及数据所在的位置,还有要保存到哪个逻辑库中,以及数据集的名字
    然后会有一个选项,就是要不要保存读入数据的那一段代码,把代码保存到哪里。。
    最后就会生成相应的数据集放在对应的位置
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    linux redis string
    【Vue】VueX 的语法详解(1)
    【kotlin 协程】万字协程 一篇完成kotlin 协程进阶
    怎样图片转文字?两分钟让你实现快速转文字
    一文带你读懂:TCP连接的三次握手和四次挥手(下篇)
    Markdown还能这么玩?这款开源神器绝了
    计算机毕业设计Java卓越导师双选系统(源码+系统+mysql数据库+Lw文档)
    C++模板
    知识点滴 - 如何写项目总结
    lua脚本关键
  • 原文地址:https://blog.csdn.net/windyjcy/article/details/127679547