《The Little SAS Book》学习笔记---Chapter2(2) DATA步中常见的读取数据方式

内容参考书籍:《The Little SAS Book》中文版


在SAS程序中,使用DATA步进行数据的读取和创建SAS数据集是一种常见的方式,接下来,将根据原数据的内容的格式不同,介绍SAS程序DATA步常见的几种数据读取形式。

读取空格分割的原始数据(列表输入)
空格分割数据示意图(来源:《The Little SAS Book》中文版)
  • 适用情形:原始文件中数据与数据之间至少存在一个空格分割符,合适的方式是使用列表输入读取该数据。
  • 局限性:
  1. 读取全部数据,无法跳过部分数据;
  2. 原始数据缺失值需要使用.进行标识;
  3. 字符型数据内部不能内嵌空格,长度小于8字符;
  4. 日期等特殊类型数据不适用。
  • 使用:
    在DATA步中,只需在INPUT关键字后面按照原数据中出现的顺序罗列出变量名称。
  • 示例
    原数据存储位置d:\mydata\test.dat, 文件内容如下:
Jack 16 . 57
Tom 17 . .
Lily 18 165 50
David 18 178 67

在DATA步中使用INPUT关键字读取:

*创建一个名为test的数据集;
*使用列表读入,读取test.dat数据文件;
DATA test;
  INFILE 'd:\mydata\test.dat';
  INPUT name $ age height weight;
RUN;
*打印数据以确保被正确读取;
PROC PRINT data = test;
  TITLE "SAS test data set";
RUN;
  • 打印结果
    打印输出的结果如下表所示:
Obs name age height weight
1 Jack 16 . 57
2 Tom 17 . .
3 Lily 18 165 50
4 David 18 178 67
  • 说明
    在原数据中空格分割的缺失值,在打印结果的表中以.显示。

读取按列排列的原始数据(按列输入)
按列排列数据示意图(来源:《The Little SAS Book》中文版)
  • 适用情形:
  1. 每个变量值能在数据行的相同位置找到,值之间可以无需空格
  2. 变量值之间或者缺失值没有分隔符或者点标识,缺失值可以留空
  3. 字符数据可以内嵌空格
  4. 可以跳过不需要的变量
  • 局限性:
  1. 所有值必须是字符型或者标准数值型,即:数字,小数点,正负号和E
  2. 带有内嵌逗号日期格式数据不适用。
  • 使用:
    在DATA步中,只需在INPUT关键字列出变量名,留出空格后,标明变量对应的列范围;如果是字符型,则在变量名后留出空格标注$符号,再标明变量对应的列范围。
  • 示例
    示例数据是书中的数据,最顶部的标尺是为了方便确定列数,原数据内容如截图所示:
    按列排列数据示例(来源:《The Little SAS Book》中文版)

在DATA步中使用INPUT关键字读取:

DATA test;
  INFILE 'd:\mydata\test.dat';
  INPUT VisitingTeam $ 1-20 ConcessionSales 21-24 BleacherSales 25-28 OurHits 29-31 TheirHits 32-34 OurRuns 35-37 TheirRuns 38-40;
RUN;
PROC PRINT data = test; /*打印数据以确保被正确读取*/
  TITLE "SAS test data set";
RUN;
  • 打印结果
    示例数据打印结果

读取非标准格式的原始数据(格式化输入)

SAS中的标准格式只有两种类型,字符型数值型。但是日常使用过程中还需遇到像日期内嵌逗号的数值等数据。这个时候简单的列表读取会导致数据格式有误。在SAS中通过使用输入格式告知计算机如何解读这些数据。

读取非标准格式数据示意图(来源:《The Little SAS Book》中文版)

  • 适用情形:
  1. 非标准格式数据,如内嵌逗号和美元符号的数值,十六进制或者压缩十进制数据;
  2. 日期数据的读取,SAS实际是把日期数据转换成了和1960年1月1日的天数差作为数值进行存储。
  • 使用:
    SAS中输入格式的三个基本类型是:字符型、数值和日期。一般形式是:
字符                                           
$INFORMATw.          
数值
INFORMATw.d
日期
INFORMATw.
  1. $符号标识字符型,INFORMAT是格式,w.指明长度;
  2. 在数值型输入格式中,w指明长度,d指明小数点后的位数;
  3. 句点对于格式中长度的规定很重要,没有句点,w会被解释为格式名;
    4.$w.用来读取标准的字符型数据,w.d用来读取标准的数值型数据
  • 示例
    原数据存储位置d:\mydata\test.dat, 文件内容如下:
Wang Xiaoming 14 10-10-2016 4.45 4.35 4.75 4.32 4.36
Li Lei        17 15-10-2016 4.17 4.75 4.32 4.75 4.75
Zhao Xiaoli   15 16-10-2016 4.11 4.17 4.75 4.75 4.11
Liu Linlin    16 12-10-2016 4.56 4.35 4.75 4.11 4.17

使用规定输入格式在DATA步中使用INPUT关键字读取上述的数据,注意也可以用其他方式读取:

DATA test;
INFILE "d:\mydata\test.dat";
INPUT name $13. age 2. +1 birthday DDMMYY10. +1 (Score1 Score2 Score3 Score4 Score5) (4.2);
RUN;
PROC PRINT data = test;
RUN;
  • 打印结果
    打印输出的结果如下表所示:
Obs name age birthday Score1 Score2 Score3 Score4 Score5
1 Wang Xiaoming 14 10-10-2016 4.45 4.35 4.75 4.32 4.36
2 Li Lei 17 15-10-2016 4.17 4.75 4.32 4.75 4.75
3 Zhao Xiaoli 15 16-10-2016 4.11 4.17 4.75 4.75 4.11
4 Liu Linlin 16 12-10-2016 4.56 4.35 4.75 4.11 4.17
  • 说明
  • 变量name的格式是$13.,它表示一个宽度为13列的字符变量;
  • 变量age的输入格式是2.,表示一个宽度为2列的数值变量,只有整数部分,没有小数部分;
  • 变量birthday的输入格式是DDMMYY10.,它表示了10列宽度的日-月-年形式的日期数据;
  • 其它的变量Score1Score5的格式都是4.2,把这几个变量名放在了同一个小括号里,就可以在随后的小括号里只规定一次便适用于所有的变量。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容