我们知道,在SAS的数据集里,对每个变量的属性都做了规定,变量类型、长度、输入格式、输出格式等等。

在这节中,我想分享一下关于在对变量的长度设定这一情况下,length语句和informat、format语句的区别。

首先阐述下length语句的SAS官方定义:

Specifies the number of bytes for storing variables.

关于informat语句的SAS官方定义:

Associates informats with variables.

关于format语句的SAS官方定义:

Associates formats with variables.

从定义来看,length是对变量存储长度的设定;informat是对变量输入格式的设定,format是对变量输出格式的设定。

我们可以直接通过日期格式来非常形象的解释这三者的区别,今天是2017年2月16日,以这个日期为例:

datatmp;

informatvar yymmdd8.;

formatvar yymmdd10.;

inputvar $;

var1 = var;

cards;

17-02-16

;

run;

运行打开结果数据集,同时对数据集右击选择列属性:

从上述结果看到日期的输入格式和输出格式,同时通过var1新变量,我们可以看到它的本质是一个数字20866,只是通过format格式展现为日期类型,由于是数值型,长度默认为8,因此我省去了length语句,var1只继承了它的变量长度属性和类型,并没有继承它的输入和输出格式。

当我们在对一个数据集的变量存储长度用length语句进行设定的时候,由于变量的输入格式并未进行设定,所以在通常的情况下变量的informat被默认为length语句下的输入格式,但是在数据的列属性里是看不到这一格式的,举个简单的例子如下:

datatmp;

lengthvar $3;

var = "abc";

run;

运行后点击数据集右键查看列属性:

最终我们看到变量的长度是3,输入格式和输出格式均为空。

而我们直接双击打开数据集,然后双击对应列,查看变量属性:

我们可以看到变量的长度为3,输入格式和输出格式都为$3.,类型为字符型。

那么接下来,我们对变量的informat进行设定,举个简单的例子如下所示:

datatmp;

informatvar $3.;

var = "abc";

run;

运行后对结果数据集进行右击选择列属性,如下所示:

我们看到变量的长度为3,输入格式则变成了$3.。

同理,对于format进行设定,我们也可以得到var的长度为3,输出格式变成$3.。

从上面两种不同的打开方式,我们看到两种不同的结果。

之所以出现两种不同的结果,我个人的观点认为前者所对应的是变量的初始化属性,而后者是变量默认的属性,当变量的输入和输出格式未初始化时,变量初始化为空,变量的默认属性为length语句设定的属性,当变量的输入和输出格式初始化时,变量的默认属性则就是初始化的属性。

之前在前一篇文章SAS中的informat和input,你真的拧得清吗?中,我讲到了关于length语句和informat语句的联系,那么接下来为了能够了解format的功能,我们举个简单的例子:

tmp1数据集采用format语句,tmp2数据集采用length语句,进行纵向合并得到tmp3:

datatmp1;

formatvar $3.;

var = "abc";

run;

datatmp2;

lengthvar $5;

var = "abcde";

run;那么在合并的时候,为了不出现截断问题,我们通常会通过使用length语句或者informat语句来进行长度的设定,如下所示:

datatmp3;

lengthvar $10;

settmp1 tmp2;

run;

最终得到如下的结果:

我们发现在设定var长度为10的情况下,最终的结果还是被截断了,第二行观测值‘abcde’被截断为‘abc’了。

为什么会出现这种情况呢,其实我们所看到的的结果是假的,var的值并没有被截断,只是受到了format语句的影响,我们右击数据集,选择列属性:

我们发现,变量var的输出格式为$3.,因此出现了上面那种被截断的假象。

为了证明这一点,做个简单的测试:

datatmp4;

settmp3;

var1 = var;

run;

通过新生成一个变量var1,var1无初始化输入和输出格式,因此我们可以看到真实的var的值,如下所示:

最终我们看到如上结果,var1的第二行观测值又恢复原值了。

为了避免这种情况,我们可以在length语句的前提下,加上format语句就可以了,如下所示:

datatmp3;

lengthvar $10;

formatvar $10.;

settmp1 tmp2;

run;

这样,我们就能得到如下结果:

上述这种情况在数据处理中其实很容易被我们忽略掉,大多数情况都是在我们使用import过程时,我们初始化了每个变量的informat和format格式,因此在后面处理这些变量时可能碰到这种类似的由于format语句而让你误以为数据产生了截断的情况,所以才有了这一节的提醒,希望能对各位有所帮助。

SAS笔记: 关于SAS中的length、informat、format功能 (转载)相关推荐

  1. 笔记:Java中Map集合的基本功能及遍历方式

    Map集合概述: public interface Map<K,V> 将键映射到值的对象.不能包含重复的键; 每个键可以映射到最多一个值. 该接口代替了Dictionary类,它是一个完全 ...

  2. SpringBoot学习笔记(4)----SpringBoot中freemarker、thymeleaf的使用

    1. freemarker引擎的使用 如果你使用的是idea或者eclipse中安装了sts插件,那么在新建项目时就可以直接指定试图模板 如图: 勾选freeMarker,此时springboot项目 ...

  3. SpringBoot学习笔记(9)----SpringBoot中使用关系型数据库以及事务处理

    在实际的运用开发中,跟数据库之间的交互是必不可少的,SpringBoot也提供了两种跟数据库交互的方式. 1. 使用JdbcTemplate 在SpringBoot中提供了JdbcTemplate模板 ...

  4. sas入门-笔记2 SAS语言

    (二)SAS语言 1.概述 基本概念:SAS语言的基本单位是语句:多条SAS语句构成一个SAS程序(文件后缀 .SAS) (1)语句构成:关键词+SAS名称+特殊字符.运算符:(关键词由系统定义的.有 ...

  5. SAS笔记(1) PDV与数据读入

    其实我是不喜欢SAS的.当然,我不喜欢她,并不代表她不好,实际上在某些应用场景下SAS是款很优秀的软件.我的数据分析之路始于R,品尝过R的灵活与简洁(不论是软件安装还是语法)后,再来学习SAS,的确提 ...

  6. SAS 2.0:中端理想“零距离”?

    狒哥观点:SAS不应满足于对服务器市场和低端磁盘阵列的统治,占领中端存储阵列才是与其能力相称的成就.随着SAS 2.0规范的出炉,这一天或许很快就会到来--希望我们不用再等两年. 七年前,一位有&qu ...

  7. python 访问sas 逻辑库,SAS | 逻辑库和SAS数据集

    [TOC] 1 临时和永久数据集 SAS数据集名称 SAS数据集有临时和永久两种存在方式.所有的SAS数据集都有一个两级名称,两个层级之间用句点.分隔. 第一层级:逻辑库引用名 第二层级:数据集名称 ...

  8. C#开发笔记之22-C#中的int、long、float、double等类型都占多少个字节的内存。

    本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:C#开发笔记之22-C#中的int.long.float.double等类型都占多少个字节的内存. | .Net中文网. C#开发笔记 ...

  9. 数据结构与算法-java笔记一 更新中

    数据结构与算法-java笔记一 更新中 数据结构与算法 什么是数据结构.算法 数据结构学了有什么用: 线性结构 数组 特点 应用 链表 存储结构 链表类型 单链表 双向链表 双向循环链表 链表与数组的 ...

  10. Linux笔记(更新中)

    Linux自学笔记 Writing In The Front: @Auther:纸箱里的猫 @Description:Linux自用学习笔记 @Last Updated Date:2021.8.9 @ ...

最新文章

  1. Nhibernate3循序渐进(三): 一对多映射和级联保存
  2. redis3.0.2 编译安装 (启动服务方式启动)
  3. 【算法+OpenCV】图像极坐标变换及基于OpenCV的实现
  4. 100页精华PPT,帮你彻底看懂5G!
  5. mysql文字字符集_MySQL字符集
  6. Qt入门(3)——信号和槽
  7. mysql中字符查询与替换
  8. 如何以学习单片机为契机,逐步成为优秀的工程师
  9. 1. ThreadPoolExecutor的一个常用的构造方法
  10. 程序员都在用的IDEA插件(不断更新)
  11. MXNet下载Fashion-MNIST错误处理
  12. echarts中x轴文件消失_实测实例:labview中波形图X轴刻度任意刻度设置
  13. bzoj 1634: [Usaco2007 Jan]Protecting the Flowers 护花(贪心排序)
  14. 程序员为什么热衷造轮子?
  15. 教你从零开始画echarts地图
  16. 笔者分享:关于Win7 XPS查看器的详细介绍【386w】
  17. 图表控件ScottPlot
  18. 有趣的手机壁纸——水印壁纸
  19. 由筷子被嘲讽来谈AM中的【价值观】
  20. Markdown 中设置文本字体为红色(改变字体颜色)的方法

热门文章

  1. Cstr 和Str有什么区别
  2. Struts2的简单搭建(三)
  3. C++那些事之SFINAE
  4. 青岛联通大数据助建智能交通平台
  5. linux pipe 命名管道,linux 进程学习笔记-named pipe (FIFO)命名管道
  6. Django-合并migrations
  7. ABT 节点 1.1 版更新日志
  8. 计算机音乐谱刚好遇见你,刚好遇见你 (完整版)
  9. 迈克耳孙干涉、光的衍射、艾里斑、瑞利判据和光栅(大学物理笔记)
  10. 留学 计算机音乐,音乐数字媒体出国留学读研申请要求