- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SAS应用基础2-2.ppt
* 混合模式输入 对一些复杂的非标准的源数据文件,各数据字段需要不同的读入模式才能正确匹配,这时可在input语句中混合使用各种读入模式。 例:imptdt07.dat中前11列是社保号,接着7列是开始雇佣日期,20-25列是逗号分隔的年薪,27列开始的字段是部门,最后是电话分机号。 Data mixdimpt; Infile d:\zxd\sas\impddt07; Input SSN $1-11 @12 HireDate date7. @20 Salary comma6. Department : $9. Phone_No; Format HireDate yymmdd10. Salary Dollar7.; Run; 你知道这里用了几种输入模式吗?程序可以改动吗? * 处理数据步的全过程 SAS系统执行数据步的过程主要分为两个阶段: ? 编译数据步 语法检查,代码转换(机器码) 创建输入缓冲区(存放数据源中的一行记录) 创建一个程序数据向量PDV (可暂存数据集的当前一条观测) 创建SAS数据集的描述部分(数据集名称、观测变量个数和变量属性等) ? 执行数据步 * 程序向量数据缓冲器PDV PDV(Program Data Vector)来存放当前的一个观测;观测数据经处理后存入数据集。这是数据步的主要工作场所。 PDV中包括两个自动生成的临时变量:_N_(记录数据步执行的次数)和_ERROR_(错误标志:0为无错误,1为发生错误) 数据步中出现的变量(包括数据集内的变量) * 数据步执行阶段 在执行期间,SAS系统执行以下步骤:(除非另有指向) 1)PDV中所有的变量值被初始化为缺失值; 2)输入缓冲器据input语句的数据需求,读入源数据文件的相应记录行, 并写相应的数据字段到PDV; 3)每个语句被顺序执行,并可修改PDV形成当前观测; 4)数据步语句一遍执行后, PDV中的值写入数据集;* 5)PDV中外部变量初始化为确失值,程序流程回到2); 6)对数据源文件的每条记录都按上面步骤执行一次; 7)重复以上步骤直到外部文件中数据结束。 * input语句后的单尾符@ 一个数据步内可以有多条input语句。但是当执行完一条input语句后,一般将放弃缓冲区内现有源数据行,而从源文件中再取一条记录更新缓冲区。若要保持现有源数据行供下一条input使用其数据,则应在input语句的最后加入@跟踪符。 例: data tmp1; input x; input y; cards; 11 22 33 44 55 66 ; run; data tmp2; input x@; input y; cards; 11 22 33 44 55 66 ; run; data tmp3; input x@; input y@; cards; 11 22 33 44 55 66 ; run; * input语句后的双尾符@@ 一般情况下,当程序执行到数据步底部后,也会从源数据文件中另取一行记录来更新缓冲区内原有数据。若要缓冲区内原有数据不放弃,使其在数据步的下一循环中仍可用,则应在input语句最后加上@@跟踪符。 例: data tmp5; input x y@@; cards; 11 22 33 44 55 66 ; run; data tmp6; input x y; cards; 11 22 33 44 55 66 ; run; data tmp7; input a@; input x y@@; cards; 11 22 33 44 55 66 ; run; data tmp8; input a@; input x 1-2 y@@; if _n_=10 then stop; cards; 11 22 33 44 55 66 ; run; * 源数据的指针控制 当SAS从数据行中读取数据时,它用指针来跟踪当前数据的位置;指针控制符可为input语句指示数据源中当前数据所在的行、列位置。 列指针控制符“+n”表示指针右移n列(n为负则左移n列); 列指针控制符“@n”表示指针移到第n列(绝对位置); 列指针控制符“@‘character-string’”表示把指针移到数据行中字符串character-string后第一个非空格列。 行指针控制符“#n”表示指针移到第n行;(当一条观测有几行源数据时,起作用) 行指针控制符“#(expression)”表示指针移到表达式的值(必须为整数)所指的行。 行指针控制符“/”表示指针移到下一行的第一列。 * 指针控制符用法示例 行指针用法示例: data tmp1; input name:$10. age / score1-score3; cards; zhangsan 12
文档评论(0)