msgbartop
List for SAS fans and programmer
msgbarbottom

05 12月 13 SAS DATA步之全解密


SAS DATA步之全解密

Swati Agarwal,OPTUM,Eden Prairie,MN

空谷幽兰  翻译  sxlion 校对  原文链接

译言:SAS DATA步对于SAS入门学习者来说是个难以理解的东西,因为SAS封装了一些过程,这种封装对于有语言基础的人来说反而是一个障碍。本文非常详细的解释了SAS 数据的编译、执行过程,对于了解SAS的基本运行有很大帮助。不管SAS老鸟,新鸟,相信你都会有收获,因为这篇文章是难得的如此系统 !

摘要

每个SAS数据步(SAS Data step,以后写成简写“DATA步”)在整个SAS程序中编译和执行过程中。大量DATA步的处理过程都是非明示的(即隐藏不可见)。例如,尽管程序中没有使用循环控制语句不包含循环,但DATA步都像一个自封装的小程序以一种非明示的循环形式执行。

这篇文章探讨了一些非明示的DATA处理过程怎么控制你的DATA步实际运行的。

需要提前说明的概念:

  •   程序数据向量(Logical Program Data Vector简写成PDV,台湾地区翻译成“程式资料向量”)
  •   SAS自动变量名及其使用
  •   理解data步的内部处理过程
  •   代码编译期间发生的事情
  •   程序执行期间实际发生了什么
  •   如何获取和存储变量属性

你或许在程序中写过大量的DATA步:一些能运行,一些则运行不了。有时候你知道为什么;有时你不知道为什么,甚至你冥思苦想而百思不得其解。如果碰到过这些问题,那么这篇文章很适合你。

Data步设计的非常好,但是有些另类。如果你想写出很漂亮的代码,就很有必要知道DATA步的工作原理。读完这篇文章以后,“哦,哦,… 原来如此!”,一个即使使用SAS多年的老鸟,也会发出这样的感叹。 from http://saslist.net

引言

DATA步是建SAS数据集的主要方法之一。要想成为一个优秀的SAS程序员很有必要理解DATA步的各个环节,主要是因为一些涉及数据处理和创建数据集的任务可能只能通过DATA步才能解决(这些任务不能通过SAS过程步(SAS procedures,以后简写成“SAS过程步”)解决、或者使用SAS过程步太过复杂而难以使用)。

了解DATA步的生命周期非常重要,它分为编译和执行两个阶段。同时学习PDV也非常重要。PDV贯穿SAS的编译和执行两个阶段,而且能决定了信息在DATA步中的存储及变化。

编译阶段包括:

  •   编译SAS语句,包括检查语法
  •  创建一个输入缓存区(input buffer)(如果需要读入原始数据文件)、一个PDV和描述性信息

执行阶段包括:

  •   计算Data步迭代的次数(从Data语句开始)
  •   将PDV中的所有变量设成缺失值并初始化自动变量
  •   读取输入观测(从原始文件或SAS数据集)
  •   执行附加的处理或计算语句
  •  将一条数据记录写入输出数据集并返回到DATA步语句

PDV贯穿编译和执行阶段:

  •  PDV是内存中的一个临时逻辑区域,SAS建立数据集时,每条观察值只有一次机会用到PDV。
  •  包含所有变量的当前值
  •  包含两个自动变量:_N_和_ERROR_

(更多…)

原创文章: ”SAS DATA步之全解密“,转载请注明: 转自SAS资源资讯列表

本文链接地址: http://saslist.net/archives/356


21 6月 13 大数据之核心技术 by SAS刘政


近期SAS公司研发总经理刘政先生在2013年6月14日中美创新系列活动之2013大数据创新峰会所做的演讲,主题为:“大数据之核心技术”  内容精彩、图片惊艳,全文pdf见文后链接。 

 

大数据 SAS公司 核心技术

大数据 SAS公司 核心技术

 

大数据 SAS公司 核心技术

大数据 SAS公司 核心技术

 

大数据 SAS公司 核心技术

大数据 SAS公司 核心技术

(更多…)

原创文章: ”大数据之核心技术 by SAS刘政“,转载请注明: 转自SAS资源资讯列表

本文链接地址: http://saslist.net/archives/313


30 11月 12 SAS公司发展史 by 刘政


导读:本文节选自SAS中国公司总经理刘政先生于2012年底受邀到全国各大高校所做的学术报告ppt,这部分介绍SAS公司历史及科技发展史,对SAS公司感兴趣的同学可以看看。

 

 

(更多…)

原创文章: ”SAS公司发展史 by 刘政“,转载请注明: 转自SAS资源资讯列表

本文链接地址: http://saslist.net/archives/309


28 11月 12 SAS高性能数据分析 by 刘政


导读:本文节选自SAS中国公司总经理刘政先生于2012年底受邀到全国各大高校所做的学术报告ppt,报告共分为两个部分:1,SAS公司历史及简介;2,大数据与SAS高性能数据分析。为了突出重点,本站于2012年11月28日选择第2部分发布。

 

(更多…)

原创文章: ”SAS高性能数据分析 by 刘政“,转载请注明: 转自SAS资源资讯列表

本文链接地址: http://saslist.net/archives/308


14 11月 12 SAS公司历史全知道一


SAS公司历史全知道一

by sxlion 

2011年美国最大的计算机专业杂志PCMAG杂志列出了科技界领袖的专属富豪榜中,SAS公司联合创始人兼CEO James Goodnight(硬翻译成“晚安”) 以69亿美元位居富豪榜第八。 如果不是因为使用SAS软件的原因,我相信大多数人不知道Goodnight这个人,他绝对够低调。另外,他也是美国北卡罗来纳州首富。

在上个世纪,SPSS,BMDP和SAS被称为国际三大统计软件,后来BMDP被 SPSS收购,SPSS今年又被IBM收购。SPSS收了BMDP以后就晾一边,晾没了,如今连域名bmdp.com处于待售状态。SPSS前老板老聂Norman Nie把SPSS卖给IBM后,自己捣腾个做R商业版本的公司Revolution R,看来老聂把BMDP和SPSS整垮了,还不甘心。不过看不出Revolution有什么前途,如今只剩下晚安老头孤独求败了。 from: http://saslist.net

图1.  Goodnight和他收藏的岩石、矿石、化石和陨石

        (更多…)

原创文章: ”SAS公司历史全知道一“,转载请注明: 转自SAS资源资讯列表

本文链接地址: http://saslist.net/archives/299


03 9月 12 SAS函数精选三 翻译


系列:  SAS函数精选一           SAS函数精选二

 

CATS和CATX函数

         这两个函数用于连接字符串。函数CATS首先去掉每个要连接字符串的首尾空格。CATX也会去掉首尾的空格,并且还会在每个字符串之间插入分隔符(CATX函数的第一个语句)。

         这些函数需要非常注意的点是结果的存储长度,如果没有预先定义,默认是长度200。而你使用连接符号(||或!!)只是这些连接字符串长度之和。

         如果你有一系列的变量如Base1-Basen,你可以在列表前使用关键词‘OF’。最后,列表中的值可以是字母,也可以说数字。如果一些语句是数字,SAS将会把数字当作字母对待,并且不会在SAS log里面出现转换信息。

         下面的例子示意这些函数字母操作去掉空格,函数CATX字母插入分隔符。

程序17

data join_up;
length Cats $ 6 Catx $ 13;
String1 = 'ABC ';
String2 = ' XYZ ';
String3 = '12345';
Cats = cats(String1,string2);
Catx = catx('-',of String1-String3);
run;

图17:程序17的输出结果

Cats         Catx

ABCXYZ    ABC-XYZ-12345

COUNT和COUNTC函数

         SAS有两个计数函数,COUNT和COUNTC。它们之间的区别就像FIND和FINDC。COUNT计算一个子字符串在一个字符串中出现的次数,COUNTC计算单独字母在字符串中出现的次数。这些函数的语句和FIND和FINDC一样。第一个语句是你想要搜索的字符串,第二个语句是子字符串(COUNT)或一列字母(COUNTC)。最后你可以在第三个语句中使用可选的修饰符,其中修饰符‘i’(忽略大小写)最有用了。 (更多…)

原创文章: ”SAS函数精选三 翻译“,转载请注明: 转自SAS资源资讯列表

本文链接地址: http://saslist.net/archives/284


03 9月 12 SAS函数精选二 翻译


系列:  SAS函数精选一              SAS函数精选三 

 

SUBSTR函数

         如果你需要从一个字符串中提取一个子字符串,你需要SUBSTR函数。需要提醒一下的是,有个函数SUBSTRN非常像SUBSTR,就是多了一些额外的特征。我不知道这些特征是否经常被需要,因此本文选择描述稍微简单的函数SUBSTR。

         此函数的第一个语句是输入字符串,第二个语句是你想要提取字符串的开始位置,第三个是,可选语句,设定子字符串的长度。如果你忽略第三个语句,函数将提取输入字符串中最后一个非空字母,也就是说,它忽略输入字符串的后面的空格(这个特征非常有用)。

         在我们继续例子之前,理解默认长度这个概念非常重要。比如说,在下一个程序中,如果你没有写LENGTH语句,SAS将仍然需要设置一个长度给State。对于这个函数,默认长度等于函数第一个语句的长度。你不能使得从字符串提取的子字符串长于字符串本身。很多其他的SAS字符函数默认长度为200。需要保证的是,具有这个功能的函数需要在DATA步中包含LENGTH语句。最好是包含LENGTH语句,即使是不需要,这样是没有风险的。http://saslist.net/

         下面是一个使用SUBSTR函数的简单例子。

程序9

data pieces_parts;
input Id $9.;
length State $ 2;
State = substr(Id,3,2);
Num = input(substr(Id,5),4.);
datalines;
XYNY123
XYNJ1234
;

         这里是你想要提取州号码(从位置3开始,一共两位),ID的数字部分从位置5开始。注意你忽略数值提取中的第三个语句。这个非常有用,因为有的数字是3个字符长,有的是4个字符长。这个例子中,你使用INPUT函数将字符转化为数值。

         图9,程序9的输出结果

    Id       State     Num

 XYNY123      NY       123

 XYNJ1234     NJ      1234

使用等号在左边的SUBSTR函数

         在早期学SAS的时候,等号在左边的SUBSTR函数被称为是SUBSTR假函数。据我所知,这是SAS唯一等号在左边的函数。下面是它的用途:

         允许你用新的字符来替代已有字符串中的字符。这个听起来挺复杂的,但是你通过下面的程序看到,这实际上是很直接的方式。下面的程序使用SUBSTR函数(等号在左边的)来遮住帐号的前五个字符。 (更多…)

原创文章: ”SAS函数精选二 翻译“,转载请注明: 转自SAS资源资讯列表

本文链接地址: http://saslist.net/archives/283


01 9月 12 SAS函数精选一 翻译


下面是Dr. Ron Cody的一篇关于SAS函数的文章,非常好的函数介绍文章。曾经在2009年SAS公司(上海)举办的一次SASor聚会上,我做了一次关于SAS函数的presentation分享,见 ppt正文,我发现竟然有部分内容重合。 我个人非常喜欢SAS系统提供的函数,建议老手新手都可以读读下面的文章,祝都有所获!

最有用的一些SAS函数
A Survey of Some of the Most Useful SAS Functions

by Dr. Ron Cody   翻译 sxlion

摘要:

     SAS函数为你的数据步(DATA step)编程提供惊人的能力。有一部分SAS函数是精华,能够帮助你节省大量不必要的代码。这篇文章内容覆盖其中最有用的一些SAS函数。有些函数可能对你来说有些陌生,然后她们将会改变你的编程方式,并助你轻松完成日常的编程任务。

 介绍:

         本文写到的大部分函数都与字符数据有关,这些函数的功能包括搜索字符串,查找和替代字符串,或连接字符串,还有些函数能测量两个字符串之间的距离(这对于“模糊”配对非常有用)。一些最新和最叹为观止的函数还以Call例程的形式存在。你知道怎么用函数在同一个观察值进行排序吗?你知道你不仅可以定位一列变量中极大或极小值,而且可以定位到第二位、第三位最大或最小的值? 如果你觉得上面的介绍能够吸引你的兴趣,请继续往下读! http://saslist.net

SAS是怎样存储字符值的?

 在我们讨论字符函数之前,了解SAS怎样存储函数值非常重要。为了帮助讨论,你首先需要理解两个重要的字符函数:LENGTHN和 LENGTHC。

LENGTHN和 LENGTHC

        这两个函数返回字符值的长度信息,其中LENGTHN返回未计算后缀空格语句的长度。LENGTHC返回字符变量的存储长度。你也许对旧的SAS函数LENGTH比较熟悉,大部分情况下函数LENGTH和LENGTHC返回同样的值。有一个例外的是,当语句里是缺失值时,LENGTH函数返回的是1,而LENGTHN返回0。有一些新函数看起来是在旧函数后面加个字母“n”,这里的“n”代表“空字符串”(“null string”)。在SAS9中,长度为0的字符串概念被引进。在大多数情况下,如果你看到一个你似曾相识的新函数(比如说新函数TRIMN, (更多…)

原创文章: ”SAS函数精选一 翻译“,转载请注明: 转自SAS资源资讯列表

本文链接地址: http://saslist.net/archives/282


27 7月 12 SAS十大性能优化技术 翻译


这是2012年SAS全球用户大会的一篇文章,主要讲编程时注意哪些问题,才能提高SAS程序的执行效率,很显然,一篇文章很难讲全SAS代码优化的全部技术,这里只是作者本人和他调查周围的程序员的一些经验总结,有很多方面并没有考虑到,如硬件情况。但是作为一篇入门级的SAS代码优化文章来读,还是很不错的。 原文链接:http://support.sas.com/resources/papers/proceedings12/357-2012.pdf

SAS十大性能优化技术

翻译 by 空谷幽兰 修改 by sxlion

摘要

SAS/BASE模块为用户读取、处理、分析、整理和生成高质量的数据和结果提供了多种选择。部分由于SAS软件提供的功能和数据源规模的原因,许多应用开发员和最终用户都需要更高效的用户指南。本篇文章列举了我个人认为SASor实施开发应用过程中最重要的前十种性能优化和编程技术。参加者学习DATA和PROC步语句和选项将有助于完成涉及数据整理,排序,分组,合并和汇总相关任务,并同时节省CPU, I/O,数据存储空间和内存资源。

引言

在编写SAS代码和/或应用程序时,代码的高效性不总是受到开发者的重视,尤其是在开发的初期阶段。应用程序的执行情况极大地受系统性能影响。理解应用程序和系统性能需求对于活跃开发员的非常重要。

应该注意每一个程序单元以使其符合高效性能评估准则。了解用户的期望(最好在应用程序开发过程的初期阶段)往往有助于开发更有效的应用程序。这样,在应用程序接近完工时提高程序效率的难度往往是最小的。本文列举了使用SAS软件时可以提高应用程序性能的几个重要方面。

Efficiency Objectives 效率导向

(更多…)

原创文章: ”SAS十大性能优化技术 翻译“,转载请注明: 转自SAS资源资讯列表

本文链接地址: http://saslist.net/archives/276


03 8月 11 SAS爱好者专用电脑配置建议 by sxlion


前言:
大家经常讨论SAS软件方面的技术问题,而对硬件关注相对较少,因此这里根据本人最近的配机经验,结合资料介绍运行SAS系统的硬件情况,给大家一个这方面的参考。 非常感谢张磊IDMer,文彤老师,shiyiming,kuhasu对本文草稿进行了很多重要建议和补充,本文才得以完善 !

正文:
一般来说,SAS系统运行环境对硬件要求不高,普通的电脑可以满足常规的小规模数据分析,但是遇到数据量大或分析任务比较重,机器不给力的情况下,那么配机或升级硬件的时候不妨在考虑的时候参考一下下面的建议。

SAS提供了很多优化程序的方法来提高速度,包括版本更新、系统选项、程序选项和新的高效方法等等,但是这都是从软件方面来优化的,作为SAS用户,如果我们需要配置一台性价比高的机器的话,我们就需要考虑哪些硬件会影响SAS运行速度的硬件,主要从三个方面来考虑即:CPU,内存,硬盘读写和IO速度 。From saslist.net

(更多…)

原创文章: ”SAS爱好者专用电脑配置建议 by sxlion“,转载请注明: 转自SAS资源资讯列表

本文链接地址: http://saslist.net/archives/154