5.SAS格式及格式化输入ppt课件.ppt_第1页
5.SAS格式及格式化输入ppt课件.ppt_第2页
5.SAS格式及格式化输入ppt课件.ppt_第3页
5.SAS格式及格式化输入ppt课件.ppt_第4页
5.SAS格式及格式化输入ppt课件.ppt_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SAS格式与格式化输入 SAS的输入输出格式 SAS的变量包含数值型和字符型变量 SAS系统对数值型 字符型和日期时间数据提供了许多输入 输出格式 用户可以用FORMAT过程来定义自己的格式 什么是格式 Format FormatisaninstructiontheSASSystemusestodisplayorwriteeachvalueofavariable SAS有输入格式和输出格式 输入输出格式 原始数据值 SAS变量的值 格式化的SAS变量值 Informatdollar10 Formatcomma8 548 231 25JAN2004 16095 01 25 2004 InformatDate9 FormatMMDDYY10 548 231 548231 Format 输出格式 输入格式 输入格式是SAS系统用来读入数据值的一个指令 输入格式形式INFORMAT 选项说明 通用规则 所有输入格式必须包含一个点 作为名字的一部分 对于省略W和D值的输入格式 使用系统缺省值 输入格式使用方法 INPUT语句 INPUT函数 INFORMAT或ATTRIB语句 INPUT语句 最常用情况 即格式化输入 格式化输入方式是INPUT语句读取非标准数据的唯一方法 即在变量名后面规定输入格式 这种输入方式不仅给出了该输入数据所对应的类型 而且给出了输入数据所在列的长度 语句格式 INPUTvariableinformat INPUT variable list informat list INPUT variable list informat 其中 n 规定在输入列表中后面的输入格式重复n次 INPUT语句 例中 从第1列开始以 8 格式读入变量name 第14列开始以yymmdd10 格式读入变量birth 右移1列 从第25列开始以5 1读入变量height 例如 dataa inputname 11 14birthyymmdd10 1height5 1 cards Wanghuacong1995 06 09178 5Zuosha1996 12 15165 8 procprint run INPUT函数 例 字符转换数值data x 39 8 y input x 4 1 putx y run 例中 INPUT函数将字符变量X的值39 8 通过输入格式4 1转换为一个数值39 8 赋给变量Y 因此Y为数值型变量 例 数值转换为字符时会产生不正确结果 例中 产生的结果为255 不正确 除非增加输入格式的长度 如y input x 15 此时 最常用的做法是使用put函数 而不是input函数 data x 2557898 y put x 8 puty run data x 2557898 y input x 8 puty run 用INFORMAT语句或ATTRIB语句 例 DATA步中用INFORMAT语句 dataa inputname 11 birthheight informatbirthyymmdd10 height5 1 cards Wanghuacong1995 06 09178 5Zuosha1996 12 15165 8 procprint run 输入格式 1 数值型变量输入格式几个常用的格式 w d 读入标准数值数据COMMAw d 用于数据中包含逗号 的数据形式DOLLARw d 用于数据前面有美元符 的数据形式说明 w 宽度 表示数值域所含的列数 小数点占一列 d 小数位数 d可以省略 例如 5 2 表示该变量的数据占5列 其中后两位是小数位 注意 一定要弄清数据占据的列数 否则极易出错 dataa inputxcomma7 ycomma7 cards 12 00234 2312 21021 311 run procprint run OUTPUT Obsxy112002342312221021311 例1 有如下两列数据 数据中包有逗号 请建立一个SAS数据集 变量为x y 12 00234 2312 21021 311 数字7是怎么来的 dataa inputxcomma7 2ycomma7 4 cards 12 00234 2312 21021 311 run procprint run OUTPUT Obsxy1120 023 4231222 102 1311 例2 有如下两列数据 其中第一列后两位数字为小数 第二列后4位为小数 例如第一个数据12 002读入后应为120 02 请建立一个SAS数据集 变量为x y 12 00234 2312 21021 311 dataa inputxdollar8 ydollar8 cards 12 002 34 231 2 210 21 311 run procprint run OUTPUT Obsxy112002342312221021311 例3 有如下两列数据 数据中包有 和逗号 请建立一个SAS数据集 变量为x y 例如 12 002读入后应为12002 12 002 34 231 2 210 21 311 dataa inputxdollar8 2ydollar8 4 cards 12 002 34 231 2 210 21 311 run procprint run OUTPUT Obsxy1120 023 4231222 102 1311 例4 有如下两列数据 其中第一列后两位数字为小数 第二列后4位为小数 例如第一个数据 12 002读入后应为120 02 请建立一个SAS数据集 变量为x y 12 002 34 231 2 210 21 311 w 输入格式 读入标准字符数据 在读入字符值之前 w 输入格式清除字符值开头的空格 w 输入格式把一个点 转换为空格 因为它把一个点看作缺失值 输出结果 xyzuvw 2 字符型变量输入格式 例 读入数据时 清除数据开头空格并将 转换为缺失值 Dataa inputname 5 cards xyz uvw optionsnocenter procprintnoobs run CHARw 输入格式 读含有空格的字符数据 CHARw 输入格式除了不清除字符值开头的空作格外 它等同于标准的 w 输入格式 例 保留开头和结尾的空格 data inputname char10 cards xyz uvw optionsnocenter procprintnoobs run INPUT语句采取自由格式输入时 INFORMAT或ATTRIB语句中不能使用 CHAR 输入格式 因为SAS把空格看作数据行中数值间的分隔符 输出结果 xyz uvw CHARw 读取包含空格的连续字符 例5 下面是一些人名 请将其读入到一个变量NAME中 注意 姓和名之间有一个空格 建立的SAS数据集如右边的形式 BillClintonGeorgeBushTonyBlairSaddamHusseinVladimirPutin dataa inputname char14 cards BillClintonGeorgeBushTonyBlairSaddamHusseinVladimirPutin procprint run Obsname1BillClinton2GeorgeBush3TonyBlair4SaddamHussein5VladimirPutin 如果将char14 去掉 语句改为 inputname 结果是什么样的呢 日期和时间数据的存储 SAS采用数值存储日期和时间形式的数据 在默认情况下 SAS系统以0代表1960年1月1日0时 其它日期在SAS系统中被存储为与该日期相差的天数 例如 1960年1月3日 在系统中存为2 2004年1月25日 在系统中存为16095 注意 为了使数值型变量显示日期形式 必须使用日期型的输出格式 同样地为了以日期形式输入日期必须使用日期型的输入格式 3 日期数据输入格式 日期数据的读入通常需要运用日期型的格式 日期时间输出格式 日期型数据的输入输出格式大部份是相同的 下面是几个常用的 该例中日期数据的形式是什么样的 例6 有如下的日期数据 请建立一个SAS数据集EX6存储 并以日期的形式显示出来 1Jan200203Jan200315 May 200412 FEB 200517 May 20061 OCT 200730 sep 2008 DDMMMYYYY故选择DATEw 输入格式 datab inputdddate15 formatdddate9 cards 1Jan200203Jan200315 May 200412 FEB 200517 May 20061 OCT 200730 sep 2008 procprint run 例7 有如下的日期数据 请建立一个SAS数据集EX7存储 并以日期的形式显示出来 01312002031220035132004421200552520061 2 20073 24 2008 该例中日期数据的形式是什么样的 MMDDYYYY故选择MMDDYY10 输入格式 01312002031220035132004421200552520061 2 20073 24 2008 datab inputddmmddyy10 formatddmmddyy10 cards 01312002031220035132004421200552520061 2 20073 24 2008 procprint run 输出格式 选项说明 输出格式是SAS系统用来输出数据值的一个指令 输出格式形式 FORMAT 通用规则 所有输出格式必须包含一个点 作为名字的一部分 省略W和D的值时 使用系统的缺省值 无论怎样规定输出格式中的小数位 输出格式都不会影响存贮的数据值 规定的输出格式宽度太窄小时 对字符格式截去右边的字符 对数值格式转换为BESTw 的格式 使用一个不协调的输出格式时 SAS系统首先试着使用其它类型的类似格式 如果行不通 将输出一个错误信息在SAS日志 输出格式类型 数值输出格式 字符输出格式 日期时间输出格式 使用FORMAT过程创建的自定义输出格式 输出格式使用方法 DATA步中用FORMAT或ATTRIB语句 PROC步中用FORMAT或ATTRIB语句 PUT语句 PUT函数 FORMAT或ATTRIB语句 最常用方式 数据步中使用dataa inputxcomma7 ycomma7 formatxydollar8 cards 12 00234 2312 21021 311 run procprint run 过程步中使用format语句procprint formatxcomma7 ydollar8 run 过程步中使用attrib语句procprint attribxyformat comma7 run PUT语句 在PUT语句中使用输出格式data x 1145 32 putxdollar10 2 putxcomma8 2 run 结果为 1 145 321 145 32 PUT函数 PUT函数对于将数值转换为字符 或者改变字符输出格式 dataa birth 16095 birthtext put birth yymmdd10 putbirthtext putbirth run LOG窗口输出结果birthtext 2004 01 25birth 16095 常用数值变量输出格式 例子 dataa x 123456789 y 1230000 z 12345 putxbest7 ybest7 zbest7 putx8 2 putx11 2 putx12 2 putydollar8 putydollar10 run Log窗口输出结果 1 235E81230000123451 2346E8123456789 0123456789 00 1230000 1 230 000 可以看到SAS会根据指定的输出宽度选择最合适的输出形式 以满足指定的宽度 例如 putydollar8 由于数据本身有7位 因此输出时仅添加了一个 符号 而未添加千分位的逗号 见倒数第二输出 自定义格式 使用PROCFORMAT过程进行格式的自定义 PROCFORMAT INVALUE格式名格式 VALUE格式名格式 其中 invalue定义输入格式 value定义输出格式 自定义输入格式 语法PROCFORMAT INVALUE格式名定义的输入格式 RUN 格式名 应符合SAS的命名要求 但不能超过8个字符 注意最后一个字符不能是数字 定义的输入格式 原始值 格式化的输入值当格式化的输入值为字符时 这字符型输入格式 名字前加 否则为数值型输入格式如 invaluesexinf F 1 M 2 invalue sexicf F Female M Male Invalue语句自定义输入格式 2355SOOS588922223878CEEE44090111398533320740SEES2398EECC5162CCCE442132227385CCCN 例 下列数据中的字母O S E C N分别赋值为4 3 2 1 0 使用输入格式读入数据 并全部转化为数值 5个变量 PROCFORMAT INVALUEscoref O 4 S 3 E 2 C 1 N 0 RUN 首先建立输入格式 数值型 等号右边为数值 使用自定义的格式scoref dataa inputidx1scoref 1x2scoref 1x3scoref 1x4scoref cards 2355SOOS588922223878CEEE44090111398533320740SEES2398EECC5162CCCE442132227385CCCN procprint run 输出结果Obsidx1x2x3x4123553443258892222338781222444090111539853332674032237239822118516211129442132221073851110 PROCFORMAT INVALUE sexf M Male F Female RUN 建立字符型输入格式 datab inputsex sexf age cards F25m22f23F21M23 procprint run 输出结果 Obssexage1Female252m223f234Female215Male23 小写字母未正确替换 PROCFORMAT INVALUE sexf upcase M Male F Female RUN 添加选项upcase 重新运行 datab inputsex sexf age cards F25m22f23F21M23 procprint run 输出结果 Obssexage1Female252Male223Female234Female215Male23 小写字母正确替换 自定义输出格式 语法PROCFORMAT VALUE自定义输出格式名字定义的格式 RUN 自定义输出格式名字 应符合SAS的命名要求 不能超过8个字符 注意最后一个字符不能是数字 定义的格式 原始值 格式化的输出值注 原始值为数值型 则为数值型格式 否则为字符型格式 此时格式名前需加 符号如 valuetestf1 5 1 5 6 10 valueynf1 是 2 否 value grpf A 试验组 B 对照组 例8 下面是我们班 问卷调查 资料的部份数据 变量sex的赋值是 1 Male 2 Female 变量Band46的赋值是 A 增加 B 不变 C 减弱 请建立一个SAS数据集EX8 对变量sex Band46进行格式化 dataqespart inputid sexheightweightband46 cards cnw1r01215449Ccnw1r02116964Bcnw1r04116967Acnw1r05215350Bcnw1r06216050Acnw2r02215646Acnw2r03117362Bcnw2r04116857Bcnw2r05215545B run procprint run PROCFORMAT VALUEsexfmt1 Male 2 Female VALUE bandfmt A 增加 B 不变 C 减弱 RUN 首先建立相应的输出格式 上面建立了两种类型的输出格式 一种是数值型的 即sexfmt 要求 号左边为数值型数值或区间 如上面的1 2为数值 另一种是字符型的 即 bandfmt 表明该格式是字符型 要求 号左边为字符或字符区间 如 A B C DATAqesfmt SETqespart FORMATSexsexfmt Band46bandfmt RUN PROCPrint RUN 格式化后打印输出的数据 对变量进行格式化 PROCFORMAT VALUEheighfmtLOW 180 RUN 利用格式对连续型变量的离散化分组 频数表编制 例9 对 问卷调查 资料中的身高编制频数表 组距取5CM 小于150为第一组 150 155为第二组 在数据步中运用格式 Formatheightheighfmt 加标签 labelheight 身高 打印数据集的内容 部份 用FREQ过程生成的频数表 SASsystemHelp 索引 输入 FORMATprocedure 列表方式输入 简单列表方式输入INPUTvariable 调整列表方式输入INPUTvariable 列表方式输入使用条件输入数据值之间至少有一个空格隔开 用小数点表示表示缺失值 字符型值的默认长度为8个字节 也可以用LENGTH ATTRIB INFORMAT语句规定长度 数据必须是字符数据或标准的数值数据 列表方式输入格式修饰符 当原始数据是以空格为分隔符时 要想对变量值长度不一致的变量规定统一长度就必须用到该格式修饰符 规定变量值是从非空格列中读取 直到第一次遇到以下三种情况之一 该变量值的读取过程才结束 下一个空格列达到变量预先设定的长度数据行结束 例 空格为分隔符时 对变量值长度不一致的变量规定统一长度 data InputUniv 12 Plc Zip cards MITBoston100023TsinghuaUnivBeijing100084 例中 第一个观测变量Univ的值为MIT 只读3个字符 因遇到空格而结束 第二个观测值为TsinghuaUniv 得到先前定义的变量长度12 如果只对变量Univ规定长度 而不加格式修饰符 在读入第一条记录时就会出错 如果不对变量Univ规定长度 读入第二条记录时就会只读入Tsinghua 而不是预先要读入的TsinghuaUniv 这是因为SAS默认的字符变量的存储长度就是8个字节 加格式修饰符 不加格式修饰符 例中 第一个观测name中JiangZhu 包含一个空格 第二个观测为AnnieZheng 包含一个空格 分隔符为两个空格 规定读入字符值时保留引号 此选项只在INFILE语句中与选项DSD一起使用时才有效 DSD选项的4个功能 将默认分隔符改为逗号 对于连续的两个分隔符 中间按缺失值处理 将字符变量值的引号去掉 对引号里的分隔符按字符来对待 所以INFILE语句中的DSD选项自动把数据记录的分隔符设置为逗号 并且读入数据之前 把字符数据中的引号去掉 若加上 就会保留数据中的引号 理解DSD和 的作用例 读入字符值时保留引号datatopics2 infiledatalinesdsd inputspeakers 15 title 40 location可以看出 包含 选项的功能 例中 虽然title变量的长度是40 而观测值得长度都不到40 仍然可以得到正确结果 所以 包含 的功能 把speakers后面的 改成了 也可以 例如 datatopics2 infiledatalinesdsd inputspeakers 15 title 40 location 输出窗口信息 但是 若把title后成的 改成 引号就因为dsd选项的存在被去掉 如下 datatopics2 infiledatalinesdsd inputspeakers 15 title 40 location 输出窗口信息 列方式输入 列输入方式是用来读入严格按列排好的标准数据 INPUT变量名开始列 结束列 条件 同一变量原始数据值在相同的列中原始数据是标准的数值格式或一般字符格式特点 1 可以按任意顺序读入数据2 字符型数据中间可以有空格3 可以重复读取原始数据中的某一部份4 空格和小数点都作为缺失值处理5 忽略开始和结尾部分的空格 按列读入 dataa inputques 1 17age18 20gender 21 26city 27 34 cards Iamhereforyou23male大连Areyouthere26female重庆hahamale哈尔滨yesiamhere30female procprint run 手机号码信息分解 手机号码一编码规则一般是 YYY XXXX ZZZZ 其YYY为号段 XXXX一般为所在地区编码 ZZZZ为对应的个人识别编号 说明 移动 134 139 150 151 152 157 158 159 188联通 130 131 132 155 156电信 133 153 180 189 可重复读入 datab inputx11 3x24 7x3 8 11x4 1 11 cards 1357851051X1508311759X1327313520X1556443719X1804346016X1513441713X1308279203X1897876466X procprint run X4重复读入前面的数据到一个变量中 列数为变量长度 命名方式输入 如果数据行中含有变量的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论