在data步中,在读取原始数据文件时,需要输入input语句,同时经常会遇到informat或者length语句,这个时候很多童鞋都容易被他们的功能搞混,input语句可以设定输入变量的输入长度,informat也可以,这个时候就郁闷了,到底咋整啊。

我们知道变量分为两种:数值型和字符型,对于数值型,我们不区分input和informat、length的长度设置功能,因为三者者基本保持一致,因此接下来只限于对字符型变量的输入进行阐述。

首先说一下input和informat。

其实,这几个语句都是为了规范变量的输入长度,我们知道在变量读取原始数据时会为其建立一个缓冲区用于数据的读取,input对于字符型变量在默认的长度情况下和informat功能保持一致,两者都是在默认间隔符为空格的前提下进行数据的读取。但是,当input对变量长度设定不再是默认的情况下,二者就有区别了。

Input语句用于设定变量的输入格式,在数据输入的缓冲区里按照input设定的长度进行满格读取,并且无间隔划分;而informat语句则在设定变量输入格式的前提下,在缓冲区读取数据时先为你划分好间隔,这么做有什么意义呢?首先它不一定满格读取,缓冲区数据字符串本身有一个长度,如果这个长度大于或者等于设定的变量长度,那么读取按照变量长度来读取,如果长度小于变量长度,则按照设定长度来读取,总之取二者之间的最小值。说了这么多,还是上代码吧:

第一种情况:当缓冲区字符串长度小于变量informat设定的长度时:

data _nul;

informat var1 $4.;

input var1 $ var2 $;

put var1 = ;

cards;

abcde fgh

;

run;

最终结果可以得到 var1 = abcd。

从上述代码,我们可以看到数据读取以空格为间隔符,var1对应的读取字符串为abcde,长度为5,大于变量设定的长度4,因此读取出来的就是abcd。

第二种情况:当缓冲区字符串长度大于变量informat设定的长度时:

data _nul;

informat var1 $7.;

input var1 $ var2 $;

put var1 = ;

cards;

abcde fgh

;

run;

最终结果可以得到 var1 = abcde。

上述代码可以看到数据区var1对应的字符串为abcde,长度为5,而变量设定的长度为7,但是读取出来的字符串依旧为abcde。

所以从这两个例子可以明显看出,informat是通过间隔符为每一个变量划分出来一个区域,abcde和fgh被划分成为两个区域,在对应区域你可以设定对应变量的长度来进行变量的读取。

如果不用informat的话,结果会发生什么变化呢?

展示一下代码如下所示:

data _nul;

input var1 $7. var2 $;

put var1 = ;

cards;

abcde fgh

;

run;

最终结果为var1 = abcde f。

从这个代码就可以看到input和informat的区别了,input并未进行划分abcde和fgh成两个区域,而是直接按照变量设定的长度来进行读取。

避免这种情况的第一种办法是对input语句的变量采用默认长度8,例如:input var1 $;

当采用默认长度(前面被排除的这个情况)时,变量就会按照间隔符读取,但是这种方法有个弊端,如果变量长度超过默认的长度8,那么就会出现字符串被截断的情况,例如abcdefghi中的i最终被截断。

第二种办法是结合informat,对于变量出现字符串长短不一的情况,我们可以对informat设定长度尽量大一点,只要超过对应字符串的各行中长度最大的那一个值就行,例如:

data null;

informat var1 $5.;

input var1 $ var2 $;

put var1 = var2 =;

cards;

abcde fgh

ab fgh

;

run;

最终结果得到:

var1=abcde var2=fgh

var1=ab var2=fgh

上述代码通过informat设定最大的值5,这样就可以同时获取abcde和ab值了。

那么对于length语句也可以实现和informat一样的功能,大家有兴趣的可以将informat替换成length试试,当然记得将informat语句的小数点去掉,length语句是不需要小数点的。

说了这么多,举一个读取外部数据的例子吧:

如下为一个txt文件:

接下来我要读取这个txt文件,文件有三行三列,以逗号作为间隔符,可以看到文件并不是很规范的排列,所以可以用informat和input结合:

data tmp;

infile “C:\users\联想\desktop\test.txt” dlm = ‘,’;

informat var1 $20. var2 $20. var3 $20.;

input var1 $ var2 $ var3 $;

cards;

run;

得到如下结果:

可以看到,与上述txt文件相对应。

希望能够对各位在informat和input的理解上有一定的帮助。

【本文转载自新闻网站http://www.dedns.cn/xinwen/2314482_2.shtml,侵删】

SAS中的informat和input相关推荐

  1. SAS笔记: 关于SAS中的length、informat、format功能 (转载)

    我们知道,在SAS的数据集里,对每个变量的属性都做了规定,变量类型.长度.输入格式.输出格式等等. 在这节中,我想分享一下关于在对变量的长度设定这一情况下,length语句和informat.form ...

  2. sas中数据输入输出格式

    format输入输出数据 1.format自定义输出格式 2.format自定义输入格式 1.format自定义输出格式 源数据: // original data data exer; input ...

  3. SAS中变量命名规则

    一般SAS中变量命名规则:下划线跟英文字母开头,英文字母.数字.下划线组成,且总长度不超过32个英文字符长度. 那么可以使用中文作为变量名么?答案是肯定的. SAS中有个专门的系统选项用来设置(大小写 ...

  4. SAS中生成哑变量的一段宏代码

    我们在建模时,可能经常会有一些将分类变量(categorical variable)转换成哑变量(dummy variable)的需求.例如"成绩"是一个分类变量,内容包含&quo ...

  5. SAS中的PDV机制

    在SAS中,我们使用DATA步来读入数据,DATA步在读入数据时实际上有两个阶段: 编译(compilation) 执行(execution) 过程如下: 在编译阶段中,逐个扫描语句,如果发现语法错误 ...

  6. html的input不可编辑状态,HTML中让表单input不可编辑的方法

    HTML中让表单input不可编辑的方法,有时候,我们希望表单中的文本框是只读的,让用户不能修改其中的信息,如使 的内容,"中国"两个字不可以修改.表单input不可编辑的方法实现 ...

  7. python中str和input_python中eval()函数和input()函数用法解析

    今天给大家讲解Python中eval()函数和input()函数的用法,希望通过实例的讲解之后大家能对这两个函数有更加深刻的理解. 1.eval()函数 eval(<字符串>)能够以Pyt ...

  8. SAS中修改一个表为编辑模式的时候不成功并给出警告的原因及解决办法

    今天看朱世武老师的<SAS编程技术教程>一书的时候,遇到一个问题,就是在SAS中打开一张表之后,右击Edit Mode,弹出了下面的警告框: 并且表格不能切换到编辑模式.经过在谷歌中搜索一 ...

  9. jQuery Mobile中文本输入域input、textarea的data-*选项

    全栈工程师开发手册 (作者:栾鹏) jQuery Mobile 所有data-*选项 jQuery Mobile中文本输入域input.textarea的data-*选项 带有 type=" ...

最新文章

  1. C#中判断文件夹或文件是否存在的方法
  2. 爬虫的基本知识第一个请求requests模块的基本使用
  3. 基本排序算法之4——归并排序mergesort
  4. 三维重建4:Jacobian矩阵和Hessian矩阵
  5. 【SpringSecurity系列02】SpringSecurity 表单认证逻辑源码解读
  6. arm linux udp 自发自收_嵌入式linux编程开发必备知识
  7. DP+BIT(优化复杂度) UESTC 1217 The Battle of Chibi
  8. 【Elasticsearch】 解决数据较少的时候 算分不准的问题 dfs_query_then_fetch
  9. 用终端访问路由器设置端口开发_网络故障排查最全总结!ONU、机顶盒、路由器常见网络问题及处理方法...
  10. ENVI4.8下载与安装步骤
  11. HTML——多选框和按钮、搜索框滑块简单验证
  12. 怎么学习iOS,如何学习iOS开发?
  13. php 获取微博cookie,c#获取新浪微博登录cookie
  14. [x y w h]转化为[ymin xmin ymax xmax]
  15. 案例分享 | 基于Linkis+DSS构建合合信息一站式数据开发平台
  16. GLES2.0中文API-glBlendFuncSeparate
  17. 奥特曼系列ol如何进老服务器,《奥特曼系列OL》新手攻略
  18. 生成微信小程序指定页面二维码
  19. eclipse安装springboot插件
  20. [好文翻译]用于遥感图像检索聚集的深度局部特征

热门文章

  1. 推荐一款非常好用的pdf阅读器Xodo 适用于windows系统
  2. 带宽、数据率(比特率)、吞吐量的理解
  3. 二分类指标Precision、Recall、Accuracy、F score、TPR、FPR、MCC
  4. OpenCV之canny()函数,边缘检测,高斯平滑滤波的理解
  5. 淘源网-站长网站源码服务平台
  6. 《商战往事》读书笔记
  7. 计算机丢失mfc120u.dll,win10系统打开mindmanager软件提示mfc120u.dll丢失如何解决
  8. Mac环境下为Python安装MySQLdb库时遇到的诸多问题
  9. 支付革新带来诸多便捷改变人们生活方式
  10. 我发表的论文,怎么跑到百度文库中了