最近因为工作需要,本人也是在快速上手sas软件,主要看的书籍还是围绕着“市面上”比较流行通用的“the little sas book"以及"深入解析sas"这两本,因为需要快速上手,所以学得也比较快速,正所谓好记性不如烂笔头,还是就这些内容,自己做一些总结性的文章,方便大家学习以及自己往后的查看。(也是因为时间紧凑,排版方面,就随意啦哈哈哈)
一、SAS初步介绍
以下内容摘选自百度百科:SAS(全称STATISTICAL ANALYSIS SYSTEM,简称SAS)是全球最大的软件公司之一,是由美国NORTH CAROLINA州立大学1966年开发的统计分析软件,是一个模块化、集成化的大型应用软件系统,功能包括数据访问、数据储存及管理、应用开发、图形处理、数据分析、报告编制、运筹学方法、计量经济学与预测等等。
基本上可以分为4大部分:SAS数据库部分;SAS分析核心;SAS开发呈现工具;SAS对分布处理模式的支持及其数据仓库设计,同时也是开发了好多好多的模块,目前对于数据分析比较常用的模块主要集中在base sas模块。
sas语句相对于Java,Python来说都是相对简单的,有以下几点常见的规则:
每一个SAS语句都由一个分号结尾,
SAS语句不区分大小写。
一条语句可以持续到第二行(只要不把一个单词分开)。
几条语句可以用一行。
二、sas数据集
1)变量和观测值:
在传统的SAS术语中,数据包括变量和观测值。采用相关的数据库的术语,SAS数据集也被叫做表、观测值也被叫做行、变量也被叫做列,你可以看到下面这个包含一些数据的表。
2)数据类型:
只有两种数据类型——数值型和字符型。数值型完全是数据,可以被加减乘除、可以是正负且是小数。字符变量是除数值之外的类型,可以是数值、字母、和一些特殊的字符(¥、!),最多可以占用32767个字节长度。
如果一个变量既包括数字又包括字符,那么它一定是字符变量。如果只包括数字,可能是字符变量也可能是数值变量。在上面这个表中,姓名是字符变量,身高和体重是数值变量,ID,既可能是数值有可能是字符,依据你的选择。
3)缺失值:
字符变量的缺失值用空格表示,数值变量的缺失值用句号(.)表示。
4)SAS命名规则:
为你的变量和数据集命名,使它们容易被辨别。为变量和数据集命名时要遵守如下规则:
名字的长度要小于等于32个字节。(一个字母1个字节,一个汉字2个字节)
以字母或下划线开头。
可以包含字母、数字、或者是下划线,不能是%$!*&#@。
可以是小写或大写字母,且不区分大小写。
5)sas文件:
SAS数据集文件(后缀为sas7bdat)
SAS程序文件(后缀为sas)
SAS日志文件(后缀为log)
SAS输出文件(后缀为list)
6)数据集类型:
分为临时数据集和永久数据集,一般来说没有特意去存放的数据集都是默认在临时数据集work中,关闭sas软件后将会被清空,若想保存数据集,用户可以根据自己的需求,创建属于自己的数据集并将数据永久存放在这个数据集中。
三、数据步与过程步
SAS程序有两个基本模块:数据步和过程步。一个典型的SAS程序,由数据步创建SAS数据集开始,再由过程步分析数据。
这里有一个例子:数据步中将米转化成千米,过程步中输出结果。
数据步负责读取、修改数据,过程步负责分析数据、输出报告和效用函数。
数据步由DATA语句开始:data+数据名。上例中数据步处理了名为distance的数据。为了读取外部数据、未加工的数据,数据步提供了DO LOOPS,IF-THEN/ELSE,以及一些数值和字符函数。数据步也可以按照你想要的方式合并数据集,包括联接(concatenation)和合并(match-merge)。
过程步由proc语句开始:proc+过程名(print、sort、means…),SAS过程步可以处理从数据储存、输出到方差分析、3D图表的一切操作。
当程序遭遇DATA\PROC等标志着新程序开始的语句时,程序结束。如果运行的是批处理,则run代表语句的结束。Run告诉SAS去执行所有之前的程序行,全局变量不是DATA或PROC过程的部分。上图的那个程序,当proc出现时,代表data过程结束。
四、数据导入
数据导入的方式大致可以分成3种,一种是使用人工input的方式,二是连接数据库进行数据导入,三是导入其他的文件格式的数据(一般常用的是csv,xls等),而这3种方式都是有对应的方法来进行操作的。下面我将罗列集中常用的方式吧。
1)向导方式导入:
这个办法最为简单了,只要根据指引一步一步操作就OK了,从文件(file)下拉菜单中选择导入数据(import data)导入向导(ImportWizard)
2)代码导入:
使用sas代码导入的语法主要为import,infile等
/* 使用import导入Excel文件*/
proc import out = Practice.app2
datafile = "F:\homework\XXX.xls"
dbms = excel replace;
sheet = "Sheet$";
getnames = yes;
format DESIRED_LOAN_AMOUNT comma15.2
ACCPT_MAX_REPAYMENT comma15.2
apply_date: mmddyy10.;
/* 使用infile导入csv文件*/
data practice.app4;
infile 'F:\homework\XXX.csv'
delimiter = ',' MISSOVER DSD lrecl=32767 firstobs=2 ;
informat DESIRED_LOAN_AMOUNT 15. ACCPT_MAX_REPAYMENT 15. DESIRED_PRODUCT_NAME $20.
ID $10. mob $11. apply_date 10.;
format DESIRED_LOAN_AMOUNT COMMA15.2 ACCPT_MAX_REPAYMENT COMMA15.2
DESIRED_PRODUCT_NAME $20. apply_date MMDDYY10. mob $11.;
INPUT DESIRED_LOAN_AMOUNT ACCPT_MAX_REPAYMENT DESIRED_PRODUCT_NAME
ID apply_date mob ;
RUN;
今晚也比较晚了,就先总结一部分内容,明晚有空再继续更新!