从程序员到数据科学家:SAS 编程基础 (05)


操纵数据是数据学家的重要工作内容之一,主要用来为数据分析或创建报表准备必要的内容。传统数据仓库领域的数据工作(ETLETCL)——数据的抽取(Extract)、转换(Transformation)、清洗(Clean)和加载(Load)都是数据科学家的家常便饭。

SAS 组织管理数据的最基本单位是SAS 逻辑库(SAS Library)和SAS 数据集(SAS Dataset)。细心的读者也许会记得SASHelloWorld 程序,第一行都是以 Data 语句开头?因为 SAS 语言就是面向数据分析的专门语言,SAS的世界里数据是分析的基础,也是从数据到智能的基石。后面我们会逐渐领略到 数据就是分析的基础” 这一精髓!

SAS 逻辑库是SAS为面向数据处理而设计的 引用和存储 单位,是SAS组织数据的顶级单位。一个SAS 逻辑库可以包含若干 成员(Member),其中最常用的成员为 SAS数据集SAS Dataset)。SAS 逻辑库和 SAS数据集的概念可分别对应传统关系型数据库(RDBMS)的数据库和数据表的概念,但SAS 逻辑库包含更加丰富的数据内容和灵活的结构。

SAS 系统预定义了若干系统逻辑库,每次启动SAS运行环境(也称为建立一个SAS会话)的时候,这些逻辑库就已经自动建立,供用户使用。一般包含5永久库sasusersashelp3个地图专用的逻辑库:mapsmapsgfkmapssas)和一个临时库 work

1.临时库(WORK):每次启动 SAS 运行环境的时候,SAS都会有一个临时逻辑库 work被建立。临时库 work 用于SAS 会话期间临时存储和访问数据SAS 会话结束(即退出SAS运行环境)后临时库work和其中的内容会被自动删除。

比如:在Windows 平台的SAS中,每次启动一个SAS会话,系统会在操作系统临时目录%TEMP%下的“SAS Temporary Files”目录中创建一个会话特定的临时路径(比如:C:\Users\sbjyiw\AppData\Local\Temp\SAS Temporary Files\ _TD8212_SBJYIW_),这是SAS 会话期间存放各种临时数据的磁盘路径。

2.永久库:永久库中的数据并不因SAS 会话结束而消失,也就是SAS运行结束后那些数据依然存在。SAS 会话的永久库由SAS启动过程中使用的那个配置文件 sasv9.cfg 来指定。

注意:SAS几乎支持所有的语言和编码,在SAS 安装环境中sasv9.cfg 配置文件有多个,默认提供英文版支持DBCS的英文版Unicode版、和十余种语言特定的版本,对应SAS 安装后的启动菜单。sasv9.cfg 也支持使用 -config 参数指向另一个配置文件sasv9.cfg 来重用其设置,从而构成配置文件体系。

sashelp:逻辑库 sashelp是系统预定义的只读逻辑库,提供系统初始化后可用的数据。逻辑库sashelp sasv9.cfg 中由以下配置被映射到多个目录,从中读取可用的数据集文件。

SASHELP (

        "!SASCFG\SASCFG"

        "!SASROOT\nls\zh\sashelp"

        "!SASROOT\core\sashelp"

                       …

        )

sasuser:逻辑库 sasuser是系统预定义的可写逻辑库,用来在SAS 会话运行期间存放当前用户特定的数据。一般用来隔离不同SAS用户数据。

逻辑库 sasuser sasv9.cfg 中使用 -SASUSER 指定,对应于操作系统中的用户主目录或者数据库中的特定用户数据库。比如在 Windows 系统中,-SASUSER 被指向 "?CSIDL_PERSONAL\My SAS Files\9.3",比如:C:\Users\sbjyiw\Documents\My SAS Files\9.3

3.用户库:也称用户自定义逻辑库,用户可以在 SAS程序中用libname 语句自定义若干用户库,用来引用存放于磁盘上或者其他数据库服务器上的数据。比如:

libname mylib 'c:\temp'*定义我的逻辑库;

* mylib 中创建系统逻辑库 sashlep.class 的拷贝,实际上文件存于 c:\temp;

data mylib.foo;

     set sashelp.class;

run;

*打印我的数据 mylib.foo,实际上引用 c:\temp\foo.sas7bdat;

proc print data=mylib.foo;

run;

不管SAS运行在什么操作系统上,你可以用同样的逻辑库引用名Library reference name)来引用你的SAS 逻辑库,逻辑库引用名是当前SAS会话能够识别的逻辑名称,指向某个操作系统能够识别的物理位置或者数据访问引擎的访问入口。逻辑库引用在SAS代码中隔离了操作系统或数据库系统的物理位置,提高了代码的可移植性

你也可以在任何需要的时候,改变某个逻辑库引用的物理指向或者清除已经分配的某个逻辑库引用

*注意改变逻辑库 mylib 的指向为 c:\windows;

libname mylib "c:\windows";

*注意清除逻辑库 mylib, 此语句后 mylib 将不再可用;

SAS并不删除c:\temp 目录中任何物理文件内容;

libname mylib clear;

SAS代码里,如果你想要删除 c:\temp 目录中的物理文件 foo.sas7bdat,可以调用如下语句:

*删除数据集 mylib.foo,磁盘上的物理文件也相应删除;

proc datasets library=mylib;

   delete foo;

run;

 SAS 运行环境中,你可以用鼠标右键点击逻辑库来查看逻辑库的属性,如下。

你也可以使用 libname 语句的 LIST功能在日志窗口中显示逻辑库信息,你也可以使用关键字_ALL_ 来列出系统中所有可用的逻辑库的信息。

libname mylib LIST;

libname _ALL_ LIST;

输出如下:

SAS 数据集(Dataset)

SAS 数据集是一种SAS特定的结构化数据文件,这种表状数据由变量(列)和观测(行)组成。变量和观测对应传统数据库中表的列和行

SAS数据集从结构上看包括 描述部分  数据部分。描述部分是数据的元数据,主要包括数据集的属性信息,比如数据集名称文件编码创建日期观测数目(行数)、变量数目(列数)、以及每一个变量的具体属性定义(名称、类型、长度、标签、输入/输出格式)等。数据部分就是每一行记录本身。要查看数据集的元数据,可以使用 PROC CONTENTS 过程步来显示。

proc contents data=sashelp.class;

run;

 SAS 代码中,数据集 [Libref.]dsname 两级名称进行引用,如果是临时库 WORK中的数据,则可以省略逻辑库引用名。

l  SAS 数据集中的每一列,在SAS代码里称为变量,其名称由1-32字节长的字母、下划线和数字组成,但不能以数字开始SAS内部用大写形式创建变量,故SAS代码中不区变量名称的大小写。

l  SAS变量类型包括 字符型  数值型 ,缺省都是8字节长字符类型的变量值可为1-32767个字节数值型可为2-8任意字节长的整数或浮点数(Windows/Linux3-8IBM大型机为 2-8)

注意:这儿谈论的SAS变量类型是传统意义上SAS数据集中的数据类型,在后面章节中我们将看到其实SAS代码能支持更加丰富的数据类型。然而,一旦持久化到SAS数据集后则只有定长字符型和数值型两大类数据类型。

l  SAS变量的输出格式用于指定该变量(列) 的缺省输出格式。这样相同的SAS内部存储值可以根据不同的输出格式生成不同的字符串表达。SAS 变量的输入格式则用于告诉SAS按照该输入格式从外部数据源读取数据到SAS 数据集中。下面将重点讲一下SAS输入输出格式。

SAS 输入输出格式 

SAS 输入/输出格式就是一个包含小数点 . 的特殊字符串,完整的格式包括格式前缀 $字符型专用格式名称 formatname输出宽度w小数点位数 d(数值型专用)等信息。完整形式如下:

<$>formatname<w>.<d>

输入/输出格式是 字符串形式的语义表达  SAS内部存储 之间的桥梁。根据SAS数据类型的不同分为字符型格式数值型格式两大类型,其中数值类型格式还包括用于数值货币日期/时间/日期时间等三个子类的格式。格式用于输入称为INFORMAT(输入格式),用于输出称为FORMAT(输入出格)。

字符型格式必须在格式名前面加美元符 $ (其实是源于英文字符串 String的首字母) 表示,w表示输出的总宽度。对于数值型变量,还可以指定小数点后的位数d。比如:

l  字符型格式:$w.

l  数值格式:w.d

1) COMMAw.d       表示用逗号做千位分隔符,小数点

2) COMMAXw.d     表示用小数点做千位分隔符,逗号作小数点,与COMMA相反,用于欧洲部分国家的数值显示。

l  货币:

1) DOLLARw.d     表示变量按美元格式输出:美元符号开头,逗号千位分隔符,小数点

2) EUROw.d    表示变量按欧元格式输出:欧元符号,逗号千位分隔符,小数点

3) EUROXw.d        EURO相同,但以小数点做千位分隔符,逗号作小数点

运行如下代码,检查输出结果: 

data _null_;

   c="abcdefghijklmn"*14bytes;

   put "char=" c;

   put "char=" c $;

   put "char=" c $14.;

   n=1234.567890;

   put "w.d=   " n 12.3;

   put " COMMAw.d=" n COMMA12.3;

   put "COMMAXw.d=" n COMMAX12.3;

   put "DOLLARw.d=" n DOLLAR12.3;

   put "  EUROw.d=" n EURO12.3;

   put " EUROXw.d=" n EUROX12.3;

run; 

系统输出:

char=abcdefghijklmn

char=abcdefghijklmn

char=abcdefghijklmn

w.d=       1234.568

 COMMAw.d=   1,234.568

COMMAXw.d=   1.234,568

DOLLARw.d=  $1,234.568

  EUROw.d=  E1,234.568

 EUROXw.d=  E1.234,568 

l  日期格式:

1) DATEw. 比如DATE7. 显示 16JAN17

2) MMDDYYw. 比如 MMDDYY10. 显示 01/01/1960

3) YEAR4. 显示 1960

4) NLDATE. 显示本地语言格式的日期,比如中文SAS上显示 2017年0122

l  时间:

1) TIMEw比如 TIME. 显示 22:16:27

2) NLTIME. 显示本地语言格式的时间,比如中文SAS上显示 17时1830

l  日期时间:

1) DATETIME比如 DATETIME. 显示 16JAN17:22:14:35

2) NLDATM. 显示本地语言格式的日期时间,比如 2017年0122 171830

data _null_;

   mydate=today();

   put mydate DATE. ;

   put mydate MMDDYY.;

   put mydate YEAR.;

   mytime=TIME() ;

   put mytime TIME.;

   mydt=datetime();

   put mydt DATETIME.;

   put mydate NLDATE.;

   put mytime NLTIME.;

   put mydt NLDATM.;

run;

系统输出:

22JAN17

01/22/17

2017

17:18:31

22JAN17:17:18:31

20170122

171830

20170122 171830

结语:SAS 数据集是SAS 组织数据的容器,更上一级采用SAS 逻辑库进行组织。SAS 数据集包含描述数据的元数据部分(表的属性以及行列定义),以及真正包含数据的观测(数据行)组成。不管数据是存在磁盘上,还是在外部数据库或应用系统中,在SAS 内部都统一通过逻辑库引用 进行访问,用户无须关注数据的存储细节,而是关注数据在分析层次的表达。

SAS 数据集中的观测(表记录)一般有三种生成方式: 1 DATA 步通过内嵌数据行、基于已有的数据集、或者外部数据库/系统来生成。2SAS数据集通过 PROC IMPORT 或者其他 面向数据操作的PROC (如 PROC SQL)生成;3)通过面向分析的PROC自动生成,一般为间数据或分析结果数据。下面我们以生成一个最简单的数据集作为本章结束,理解SAS数据集的结构。

libname mylib 'c:\temp'; 

data mylib.mydata (label="This is my first data");

   length column1 $32;

   column1="The only constant is change";

   column2=1234.5678;

   format column2 dollar10.2;

   label column1="This is Char column";

   label column2="This is Num column";

run;

proc contentsrun;

proc printrun;


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 作为程序员编程必备基础知识非常重要,并且下载CSDN网站上的资源将对我们很有帮助。 首先,计算机基础程序员必备的基础知识之一。这包括计算机体系结构、计算机网络、操作系统等方面的知识。了解计算机的工作原理,对于编写高效、可靠的程序至关重要。在CSDN网站上,我们可以下载各种教程或书籍,学习这些基础知识。 其次,编程语言是程序员必备的基础知识之一。不同的编程语言适用于不同的应用场景,例如C语言用于系统开发,Python用于数据分析和人工智能等。在CSDN网站上,我们可以下载各种编程语言的学习资料和示例代码,帮助我们快速入门和提高编程能力。 此外,算法和数据结构是程序员必备的基础知识之一。良好的算法和数据结构设计可以提高程序的性能和效率。在CSDN网站上,我们可以下载各种经典算法和数据结构的实现代码,学习它们的原理和应用,提升我们的算法和编程能力。 最后,软件工程和项目管理是程序员必备的基础知识之一。了解软件开发过程、版本控制、测试和质量保证等方面的知识,可以提高我们的团队协作和项目管理能力。在CSDN网站上,我们可以下载各种软件工程和项目管理的书籍和工具,帮助我们学习和应用这些知识。 总而言之,计算机基础编程语言、算法和数据结构、软件工程和项目管理是程序员必备的基础知识。在CSDN网站上,我们可以下载各种教程、书籍、示例代码和工具,帮助我们学习和提高这些知识和能力。 ### 回答2: 编程必备基础知识对于程序员来说非常重要,它们是构建程序和解决问题的基础。而在download.csdn.net网站上,你可以找到关于计算机基础的许多资源。 首先,计算机基础包括计算机硬件和操作系统的知识。硬件包括中央处理器(CPU)、存储器、输入输出设备等组成部分。了解硬件的工作原理和性能可以帮助程序员优化程序并充分利用计算资源。同时,操作系统是计算机运行程序的核心,学习操作系统的概念和功能可以帮助程序员理解程序与硬件之间的交互过程。 其次,数据结构和算法是编程中必不可少的基础知识。数据结构涉及如何组织和存储数据,例如数组、链表、栈、队列和树等。而算法则是解决问题的步骤和策略,包括排序、搜索、递归、动态规划等。在download.csdn.net网站上,你可以找到许多关于数据结构和算法的教程和示例代码,帮助你提升编程技巧和解决问题的能力。 另外,编程语言也是程序员必备的基础知识之一。不同的编程语言有各自的语法和特点,了解它们可以帮助你选择适合的语言来解决问题。在download.csdn.net网站上,你可以找到各种编程语言的学习资料和代码示例,例如C++、Java、Python等。 最后,计算机网络和数据库也是程序员需要了解的基础知识。计算机网络涉及如何在不同计算机之间传输数据和通信。而数据库则涉及如何组织和管理数据,例如关系型数据库和非关系型数据库。在download.csdn.net网站上,你可以找到关于计算机网络和数据库的教程和工具,帮助你深入了解这些概念和技术。 总而言之,在download.csdn.net网站上,你可以找到丰富的计算机基础知识的学习资源。掌握这些知识可以帮助你成为一名更优秀的程序员,更好地构建程序并解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值