SASBASEBASE
BY : BY :
Page 2
目录
第一章:SAS系统初识
第二章:SAS函数
第三章:SAS访问外部数据文件
第四章:SAS数据步
第五章:SAS过程步
第六章:SAS输入输出格式
第七章:SAS宏技术
第八章:SAS SQL查询
第九章:SAS 数据统计分析
第十章:SAS 综合运用举例
第一章
Page 3
SAS
系统初识
Page 4
SAS系统诞生
全称为Statistics Analysis System,最早由北卡罗来纳大学的两位生物统
计学研究生编制
1972研制出第一版,1976年成立了SAS软件研究所,正式推出了SAS软件,
现在是版
是用于数据分析与决策支持的大型集成信息系统,统计分析功能是它的重
要组成部分和核心功能
国际上的标准软件系统
Page 5
BASE SAS模块
SAS/STAT---统计分析模块
SAS/ETS---经济计量学和时间序列分析模块
SAS/OR---运筹学模块
SAS/QC---质量控制模块
SAS/IML---交互式矩阵程序设计语言模块
SAS/GRAPH---绘图模块
SAS/FSP---快速数据交互式菜单系统模块
SAS/AF---交互式应用开发模块
SAS/ASSIT---菜单驱动界面模块
SAS/ACCESS---访问外部数据模块
SAS/EIS---企业信息系统模块
SAS/INSIGHT---可视化探索工具模块
SAS/CALC---电子表格模块
SAS/CONNECT---分布式数据处理模块
SAS/WA---企业级数据仓库管理模块
SAS/EM---企业级数据挖掘模块
SAS功能模块
Page 6
命
令
行
菜单栏
工具栏
窗口条
功能窗口
SAS工作界面*---重要功能键:F1,F5,F6,F7, F9,CTL+E
SAS工作界面
Page 7
SAS两类菜单栏
菜单栏的下拉菜单
操作:点菜单栏中的按钮
弹出菜单
操作:相应窗口点鼠标右键
Page 8
SAS工具栏
资源管理器窗口工具栏
编辑器窗口工具栏
Page 9
SAS 命令
在命令行中输入SAS命令可以快速完成一些SAS任务
Page 10
SAS主要功能窗口
以“只显示内容”视图显示的“SAS 资源管理器”窗口(没有树视图)
“结果”窗口
程序编辑器、增强型编辑器
“日志”窗口
“输出”窗口
“SAS 资源管理器”窗口
Page 11
SAS资源管理器窗口
SAS 资源管理器窗口下,可以执行基本的 SAS 任务:
1、 创建新的逻辑库和文件快捷方式;
2、创建新的逻辑库成员和目录条目;
3、打开和编辑 SAS 文件。
根据操作环境,可以使用以下方法打开“SAS 资源管理
器”窗口(打开树视图和列表视图):
1、菜单: 查看=> SAS 资源管理器
2、命令: EXPLORER
3、工具栏: SAS 资源管理器
Page 12
SAS结果窗口
可以通过结果窗口对程序的输出结果进行浏览和管理
1、SAS可以用一种或多种格式(或类型)
产生输出。
2、默认类型是“列表”输出(如右图的“查询
结果”)。
3、其他输出类型包括 HTML、“输出数据
集”和 PostScript。
Page 13
SAS 输出类型设置
要设置输出类型,可使用菜单栏=>工具=>选项=>参数选择=>“结果”标签,进
入参数选择窗口进行设置如下图所示。
点选创建HTML时,输出结果同时展现在HTML文件中。
Page 14
SAS增强型编辑器窗口
版本的默认编辑窗口为增强型。它比普通编辑窗口增加了如下功能:
使用特定颜色对SAS程序、SCL程序以及HTML和XML文件的元素进行显示,同时进
行相关语法检查。
创建和格式化自定义的关键词。
每个过程步、数据步或者宏的程序段都可以实现展开和收缩的功能,以便对SAS程
序的宏观结构有更好的了解。
通过定义缩写来快速输入一段文字。
通过显示行号使得程序代码更具可读性。
设定增强型编辑器的快捷功能键。
同时打开一个文件的多个视图。
将光标停留在语言元素上,按F1就可以直接进入到SAS帮助文档中该语言元素的说
明部分,当然有时候该语言元素有多个主题,可以根据需要进行选择。
Page 15
SAS日志窗口
“日志”窗口用来查看程序运行信息:
提交的程序语句;
系统消息和错误;
程序运行速度和时间。
“日志”窗口中的元素根据以下类型呈现不同的颜色:
程序行 黑色:以语句标号开始;
提示 蓝色:以NOTE开始;
警告 绿色:以WARNING开始;
错误 红色:以ERROR开始。
Page 16
SAS 输出窗口
proc print data=;
quit;
按F8提交程序,SAS界面如下所示:
输出窗口用来查看SAS程序的输出结果
Page 17
SAS新建逻辑库
1、在逻辑库级别,在空白处按右键,选择新建,出现如下界面。
2、在名称中输入新的逻辑库名称。
3、在引擎中根据数据来源选择不同的引擎,如果只是想建立本机地址上的一个普通的
SAS数据集数据库,可以选择默认。
4、然后点选启动时启用,在逻辑库信息中,点选路径后面的浏览按钮,选择与这个逻辑
库相对应的物理地址。选项窗口可以不填,点击确定产生一个新的逻辑库。
Page 18
SAS程序编辑窗口操作
提交程序
可以用增强型编辑器编写程序,
也可以将用其它文本编写的程序
拷贝到编辑器。程序完成后,直
接按F3或者F8提交程序,或点选
工具条中的提交按钮,或者在命
令框中输入Submit命令。
储存程序
程序可以保存为其它格式的文本,
也可以直接以编辑器的方式来储
存,直接点选文件=>保存,选择
路径就可以保存这些程序。
Page 19
SAS数据集导入和导出
第一步:点选文件=>导出数据,出现如下界面,要求输入要导出文件的逻辑库名称和数据文件
名称,比如要导出sashelp逻辑库的class数据文件,通过下拉菜单选择逻辑库和数据文件。
Page 20
SAS数据集导入和导出
第二步:点选next,进入到选择输出格式界面。通过下拉菜单选择给定的格式:
Microsoft Excel 97,2000 or 2002 workbook,然后点选next.
Page 21
SAS数据集导入和导出
第三步:进入到设定输出文件位置和名称界面,通过浏览按钮选择输出位置,并键入
输出文件的名称,如E:\ .
Page 22
SAS数据集导入和导出
第四步:点选ok,进入到SAS Export Wizard画面,SAS Export Wizard和后面要介绍的
Import Wizard是SAS转换数据文件的工具。在这个画面中,Export Wizard要求对这个输
出过程的table命名,这时可以直接选finish完成输出,或者命名为’1’。
Page 23
SAS数据集导入和导出
第五步:如果上一步选择命名,SAS会建立一段与上述窗口操作相同的程序,并提示是否
要保存这段程序。
SAS对数据的管理
1:SAS对数据的分析与呈现都是面对SAS数据集进行
2:SAS数据集是一种SAS文件
3:SAS文件是由SAS系统创建和管理的有特殊结构的文件。
Page 25
SAS对外部数据的管理
数据直接输入 流行的数据库 其它文件格式
SAS数据集
SAS应用程序
数据分析过程中
用得较少
数据挖掘过程中
用得较多
常用的数据分析
获取外部数据
TXT
EXCEL
CSV
SPSS
……
ACCESS ; DB2 ;
ORACLE ……
Page 26
SAS 逻辑库
26
SAS逻辑库由一组SAS文件组成。SAS软件系统的信
息组织有两层,第一层是SAS逻辑库,第二层是SAS
文件。
SAS逻辑库是一个逻辑概念,本身不是物理实体,它
对应的实体是操作系统下一个文件夹或几个文件夹中
的一组SAS文件。
SAS逻辑库文件用两级命名方式定名:
-filename
(库标记.文件名)
SAS数据集
SAS数据库
SAS逻辑库有永久库和临时库两种
临时库:名为WORK,系统自动指定
永久库:系统自动指定名为SASUSER,
(SASHELP等).
其它可由用户指定
Page 27
SAS 创建逻辑库
逻辑库名是SAS名,长度不能超过8个字节。
如SAS逻辑库:ResDat, SASHELP等。
建立SAS逻辑库的方法:
用菜单操作;
用LIBNAME语句。
语句格式:
LIBNAME libref <engine> 'SAS-data-
library'
语法说明:
Libref 逻辑库名
SAS-data-library 逻辑库对应的物理地址
Engine 引擎名称(缺失时为默认引擎)
例1 用LIBNAME语句创建SAS逻辑库。
libname zkxr 'C:\Documents and
Settings\user\桌面\中科信软SAS培训\逻
辑库\a';
例2 引用非临时库的SAS文件时必须使用
两级命名方式,而引用临时库的SAS文件
时,可以直接使用文件名,效果等同于
work.文件名。
data ;
set ;
run;
Page 28
SAS 语句
SAS语句就是一系列关键词、SAS名称、算符以及特殊字符的组合。所有的SAS语
句以分号结尾。
SAS语句一般分为数据步语句与过程步语句,以及可以用在SAS程序任何地方的全
局通用语句。
KEYWORD parameter…<Item1|item2…|itemn>options;
关键词 参数…<项目1或项目2…或项目n> 选项;
其中:
•粗体---必须按显示形式书写的关键词;
•白正体---用户提供的信息;
•<>---括号内的信息可选;
•|---任选。
参数PARAMETER不是任选项,不用括号,OPTIONS是选项关键词。
Page 29
SAS语名举例
例 有效的SAS语句。
data data1; /* data为关键词,data1为SAS名 */
data _null_; /* _null_为SAS名 */
put name $ 8.; /* put为关键词,name为SAS名,$8.为输出格式*/
format date yymmdd10.;
proc means data=; /* proc为关键词,means为过程名 */
infile “d:\ResDat\”;
do I=1 to 100;
x=y+1;
sumx+x;
run;
Page 30
SAS options选项
系统选项用来控制SAS的运行方式,如SAS系统启动,硬件软件的连
接,SAS程序的运行等。
语句格式:
OPTIONS option(s);
option 设定一个或多个系统选项,任何系统选项都有一个默认设置。
例: 设定选项
OPTIONS obs=5;/*取数据集前五个观测*/
Data one;
Set ;
Run;
Page 31
SAS 表达式
表达式由一系列操作符和操作对象构成,产生一个目标值。
使用表达式可以对变量作变换和赋值,创建新变量,计算新数值以及
控制条件语句的运行等。
操作对象有:
变量;
常数。
操作符包括:
算术算符;
比较算符;
逻辑算符;
SAS函数;
括号。
Page 32
SAS 常数
SAS常数是SAS系统可以识别的一些固定值。
1.数值常数。
1, –5, , , 2E4 , 20000
数值常数可以有多种格式展示。
标准格式:1,01,+1,-1,;
科学计数法:, -12;
十六进制格式:1cx,12x,9x
2.引用带引号的字符常数。
name=’TOM”S’;
name=”TOM’S”; /*例中,两语句等价。*/
要注意的是,字符常数是由引号括起来的,但
是字符变量的名称则没有引号,也就是说字符
常数不能作为字符变量的名称。
3.引用日期时间常数。
’1jan2000’d; ’01jan00’d;
’9:25’t; ’18jan00:9:27:25’dt
if begin=’01JAN2000’d then end=’31DEC2000’d;
Page 33
SAS 算符
SAS算符是一些符号,其作用是进行计算、比较等。
算术算符应用。
data;
X=**;
put X=;
Y=9+1/3;
put Y=;
X=.;
Y=1+X;
put Y=; /*Y也是缺失值*/
run;
X=
Y=
Y=.
比较算符应用。
if x<y then c=5;
else c=12;
比较算符经常出现在IF语句里。
比较准则:
数值和字符都可以比;
结果为真赋值1,假赋值0;
字符值从左到右逐个按ASCII码排列序列进行比较;
缺失值参加比较时,它比任何有效值都小。
Page 34
SAS 算符
逻辑算符
算符 等价形式 含义
& AND 与
| OR 或
^ NOT 非
字符串连接符:包括|| ¦¦ !!等
data _null_;
a=" 中 华";
b="人 民 ";
c=" 共和 国";
x1=a||b||c;
x2=a¦¦b¦¦c;
x3=a!!b!!c;
put x1;
put x2;
put x3;
run;
输出结果:
中 华人 民 共和 国
中 华人 民 共和 国
中 华人 民 共和 国
可以看到这些连接符输出结果完全一致,只是单纯的连接,不会对空
格进行特殊处理。但有时需要对空格进行处理。
常用的字符连接函数包括以下几个:
trim() :去掉字符串尾部空格,如果字符串为空,则返回一个空格
left() :把字符串开头的空格移到尾部
strip(): 去掉字符串开头和结尾的所有空格
cat() :与||作用类似,保留首尾全部空格
catt() :但是连接之前会去掉各字符串尾部空格,相当于连接符结合trim
()使用
cats() :但是连接之前会去掉首尾全部空格,相当于连接符结合strip()
使用
catx() :但是连接之前会去掉首尾全部空格,并且在字符串之间加上一
个指定的字符串
Page 35
SAS 算符连接函数
data _null_;
a=" 中 华";
b="人 民 ";
c=" 共和 国";
x1=trim(a)||trim(b)||trim(c);
x2=left(a)¦¦left(b)¦¦left(c);
x3=strip(a)!!strip(b)!!strip(c);
x4=cat(a,b,c);
x5=catt(a,b,c);
x6=cats(a,b,c);
x7=catx('我爱',a,b,c);
put x1=/x2=/x3=/x4=/x5=/x6=/x7=;
run;
Page 36
SAS 算符连接函数
x1=中 华人 民 共和 国
x2=中 华 人 民 共和 国
x3=中 华人 民共和 国
x4=中 华人 民 共和 国
x5=中 华人 民 共和 国
x6=中 华人 民共和 国
x7=中 华我爱人 民我爱共和 国
Page 37
SAS 变量
SAS变量分为数值变量和字符变量。
数值变量
数值变量是SAS系统以浮点(floating-point)方式存储的数据变量,数值变量包括日期和
时间。
数值变量的值只能是数值。
字符变量
字符变量可以由阿拉伯字母、数字0-9以及其它一些特殊字符组成。
字符变量的值可以是字符、字母、特殊字符和数值。字符变量名后跟一个美元号($)表
示该变量是字符型而不是数值型。
Page 38
SAS 创建变量的方式
使用赋值语句
• Data a;
• x=1;
• run;
• /*数据集a中有个变量
x,值为1*/
使用INPUT语句
• Data b;
• Input x $;
• Datalines;
• Aaa
• Bbb
• ;
• Run;
使用FORMAT 或 INFORMAT语句
Data b;
Set b;
Informat y $9.;
Run;
以类似的方式创建变量的还有LENGTH语
句,ATTIRB语句。
Page 39
SAS
输出格式format是SAS用来确定如何输出或写出数据值的指令,用FORMAT控制数据
值在输出时所使用的格式。
输入格式informat是SAS用来确定如何将数据读入变量的指令。
如果在输入或输出数据集的过程中没有设定变量的输入和输出格式,系统会自动使用
原数据集中的这个变量原有的输入输出格式。
语句格式:
<$>format<w>.<d>
<$>informat<w>.<d>
格式说明: $ 指定为字符格式,如果该项空缺,则默认是数
值格式
format 规定有效SAS输出格式
Informat 规定有效SAS输入格式
w 设定输入输出的长度,一般来说是数据所占的
列的数目
d 设定数值数据中小数点的位数
Page 40
SAS 变量类型转换
A.字符型变量转换为数值型变量
1. 将字符型变量进行算术运算;
2. INPUT(数据源, 输入格式);
B.数值型变量转换为字符型变量
1.将数值型和字符型变量连接;
2.使用函数如SUBSTR,left,right等;
3. PUT(数据源, 输出格式);
data a;
input x 6. y $8.;
cards;
12345 45644
2322 12113
3311
;
run;
/*A.字符型变量转为数值型变量*/
data a;
set a;
z1=y+0;
z2=input(y,8.);
run;
/*B.数值型变量转为字符型变量*/
data a;
set a;
m1="a"||x;
m2=left(x);
m3=put(x,$8.);
run;
变量列表 缩写 备注
X1 X2 … Xn X1-Xn X1~Xn的所有变量,中间是一横
XA XB … XY X: 取所有以X为开头的变量
假设数据集中有六个变
量:X Y Z A B C被先后输
入,分析过程中,只分析前
四个变量.
X--A X~A的所有变量,中间是两横
X_numeric_A X~A的所有数值型变量
X_character_A X~A的所有字符型变量
_numeric_ SAS数据集内所有的数值型变量
_character_ SAS数据集中所有的字符型变量
_ALL_ SAS数据集中的所有变量
_N_ 预测序号
Page 41
SAS 自动变量
data b;
set a;
keep _numeric_;
run;
data c;
set a;
keep _character_;
run;
/* 只保留数据集中的数值变量*/ /* 只保留数据集中的字符变量*/
Page 42
SAS 程序书写规则
SAS语句的书写规则灵活自由:
语句可在行的任一列开始;
一个语句可以分写为多行;
多个语句可以写在同一行;
语句中各项之间至少用一个空格或特殊字符隔开;
应遵守的书写规则:
不同程序步间留空行;
每条语句都要另起行。
比较规范的书写有助于阅读和检查,还可以减少书写错误。
注释语句的两种格式:
/* 注释内容 */
* 注释内容;
Page 43
第二章
SAS
函数
Page 44
SAS 函数定义
SAS函数是一个子程序,对自变量返回一个结果值。
SAS函数的形式:函数名(X1, X2, …)
函数用于组合表达式可以简化编程和统计计算
例:表达式中用函数。
data a(keep=date y d min); /*保留date, y, d, min四个变量*/
set ;
y=year(date); /*函数year给出变量date年份*/
d=weekday(date); /*函数weekday给出变量date在一周内的哪一天*/
min=min(sum(oppr, hipr, lopr,clpr),1000);
run;
Page 45
SAS
例 用与不用SAS函数时的程序。
在不用SAS函数的情况下:
totx=xl+x2+x3+x4+x5+x6+x7+x8+x9+x10;
if totx<y then least=totx;
else least=y;
使用SAS函数。
least=min(sum(of x1-x10),y);
例中,两段程序的结果相同,
第二段只有一个语句,非常简单。
例:条件语句中使用函数。
data a;
set ;
where year(date)>1996;
/* Where语句中使用Year函数 *
run;
Page 46
SAS 函数自变量
自变量类型:
• 变量名;
• 常数;
• 函数;
• 表达式。
例 函数及其自变量类型举例。
Page 47
SAS 函数自变量
自变量个数:
有些函数不需要自变量,有些只需要一个自变量,有些函数有多个自变量。
中,自变量个数不能超过32767。
如果函数的自变量是表达式,在函数被调用之前,所有表达式自变量首先计算。
自变量表示法:
当函数有多个自变量时,必须用逗号分隔开。
自变量名缩写方法:
函数名(OF变量名1…变量名n )
Page 48
SAS 函数自变量
例 正确与错误的表示方法。
例 数组元素自变量的缩写方法。
array y{10} y1-y10; /*定义数组y{10} */
x=sum (of y{*});
z=sum (of y1-y10);
例中,两个SUM函数的表示法是等价的。
Page 49
SAS 函数结果
通常函数的结果由其自变量的属性决定:
自变量是字符时结果变量为字符;
自变量是数值时结果变量为数值。
◎PUT函数是一个例外,它不管自变量是什么类型,其结果总是字符值。
Page 50
SAS用PUT语句在LOG窗口显示函数值
例 显示概率值和分位数。
data;
Y=probnorm(); /* 标准正态分布小于的概率 */
put Y;
q1=tinv(.95, 2); /*自由度为2的t分布的分位数*/
q2=tinv(.95, 2, 3); /*自由为2,非中心参数为3的t分布的分位数*/
put q1= q2=;
run;
结果:
q1= q2=
Page 51
SAS 日期函数
SAS日期和时间存贮标准是以1960年1月1日0时0分0秒为起点,然后以相应的间隔记
时。
如1960年1月1日9时0分,按日记的数值就是0,按小时记的数值就是9。1960年1月2
日0时0分,按日记的数值就是1,按小时记就是24等。
由于日期函数是一类非常重要的函数,特别是对金融数据处理和金融计算,借助日期
函数可以极大提高效率。
Page 52
SAS日期函数
例 计算两个日期之间的天数。
data _null_;
sdate='01jan2002'd;
edate='01jan2003'd;
actual=datdif(sdate, edate, 'act/act'); /*按每个月的实际天数算 */
days360=datdif(sdate, edate, '30/360'); /*按每个月30天计算 */
put actual= days360=;
run;
data _null_;
actual=datdif(‘01jan2002’d, ‘01jan2003’d, ‘act/act’);
days360=datdif(‘01jan2002’d, ‘01jan2003’d, ‘30/360’);
put actual= days360=;
run;
例中,两段程序的结果一样。actual=365, days360=360.
Page 53
SAS 日期函数
例 以日为单位计算当前日期的天数。
data;
x=date ();
y=today();
put x= y=;
run;
例中,DATE()和TODAY()结果一样,都是
返回当天的天数。当然,也可以用一定的日
期格式表示它们。
data;
x=date ();
y=today();
format x y yymmdd10.;
put x= y=;
run;
例 计算日期值所在的年季月以及
处于某月的第几天。
data _null_;
sdate='01jan2002'd;
year=year(sdate);
qtr=qtr(sdate);
month=month(sdate);
day=day(sdate);
put year= qtr= month= day=;
run;
结果显示:
x=17232 y=17232
结果显示:
x=2007-03-07 y=2007-03-07
结果显示:
Year=2002 qtr=1 month=1 day=1
PROC FREQ options;
选项说明:
ORDER=选项及说明
Page 54
SAS 频数分析过程
Page 55
SAS频数分析
FORMCHAR(1,2,7)= '符号串':
1规定垂直线字符;
2规定水平线字符;
7规定水平与垂直交叉线字符。
通常情况下的FORMCHAR=选项:
FORMCHAR(1,2,7)= '| - +';
表格没有轮廓线和分隔线的FORMCHAR=选项:
FORMCHAR(1,2,7)= ' ' ; /* 三个空格 */
Page 56
SAS频数分析过程
proc format ;
value $weekb '周一'='monday' '周二'='tuesday' '周三'='wednesday' '周四'='thursday' '周五
'='Friday';
/*按数据输出值的格式排序*/
proc freq data= order=formatted /*formatted,freq,data,internal */;
table week;
format week $weekb.;
run;
/*按频数的降序排序*/
proc freq data= order=freq /*formatted,freq,data,internal */;
table week;
format week $weekb.;
run;
/*按数据集中数据出现的次序排序*/
proc freq data= order=data /*formatted,freq,data,internal */;
table week;
format week $weekb.;
run;
WEIGHT variable;
该语句规定一个WEIGHT变量,它的值表示相应观测的权数。该变量的值应大于零。
若这个值<0或缺失,假定该值为0。
BY variable-list;
对BY变量定义的观测组分别计算其相应的简单统计量。当使用BY语句时,要求输入数
据集已按BY变量排序的次序排列,除非指定NOTSORTED。
OUTPUT语句 :OUTPUT <OUT= SAS-data-set><output-statistic-list>;
该语句创建一个由PROC FREQ过程输出统计量的SAS数据集。OUTPUT创建的数集可
以包括由TABLES语句规定的任意统计量。
PROC FREQ过程每一次只允许使用一个OUTPUT语句。当规定多个TABLES语句时,
OUTPUT语句创建的数据集内容对应于最后那个TABLES语句,当一个TABLES语句中规
定多个表时,OUTPUT创建的数据集内容对应于最后那个表。
选项说明:
OUT=规定输出数据集;
output-statistic-list规定输出数据集中所包含的统计量。
Page 57
SAS 频数分析过程
Page 58
SAS 频数分析过程举例
data a;
do I=1 to 1000;
X=int(ranuni(8888)*3)+1;
Y=int(ranuni(8888)*4)+1;
output;
end;
run;
proc freq data=a(drop=i);
*table x y; /*对所有变量进行频数分析时,
不要该句和要该句效果一样*/
title '没有TABLES语句';
run;
proc freq;
tables x x*y/chisq;
run;
proc freq;
tables x*y/list;
run;
产生区间[0, 1]上均匀分布的随机数1000个,
分别将区间[0, 1]均分成3和4个小区间,并把
产生的随机数按所属区间转换为整数。然后
对这些整数作频数分析。
均值过程(MEANS)用于计算变量的基本描述统计量。
Page 59
SAS均值过程
PROC MEANS <option(s)> <statistic-keyword(s)>;
BY <DESCENDING> variable-1 <... <DESCENDING> variable-n>
<NOTSORTED>;
CLASS variable(s) </ option(s)>;
FREQ variable;
ID variable(s);
OUTPUT <OUT=SAS-data-set> <output-statistic-specification(s)>
<id-group-specification(s)> <maximum-id-specification(s)>
<minimum-id-specification(s)> </ option(s)> ;
TYPES request(s);
VAR variable(s) < / WEIGHT=weight-variable>;
WAYS list;
WEIGHT variable;
Page 60
SAS 均值过程
PROC MEANS <option-list> <statistic-keyword-list>;
option-list选项说明:
Page 61
SAS 均值过程
ALPHA= 规定置信区间的显著水平
DATA= 规定输入数据集
NOPRINT 不输出任何描述统计量
MISSING 规定把CLASS变量的缺失值作为有效分组值处理
DESCENDING 规定输出数据集是按_TYPE_值降序(缺省是上升)排
列,选择NWAY时该选项无效
ORDER=选项及说明:
VARDEF=选项及说明:
Page 62
SAS 均值过程
statistic-keyword-list选项就是均值过程可以计算的描述统计量。规定的关键词可以分
为三类:
描述统计量关键词;
分位数关键词;
假设检验关键词。
Page 63
SAS 均值过程
proc means data= maxdec=2 mean n max min range std alpha=.05 clm fw=8;
var wait quit;
class week;
output out=a mean=mean_w mean_q n=n_w n_q max=max_w max_q min=min_w
min_q range=range_w range_q std=std_w std_q;
run;
Page 64
SAS单变量过程
单变量过程(UNIVARIATE)除了能计算均值过程的基本统计量外,还可以实现的计
算和功能有:
稳健性估计量;
描述变量的分布图;
频数表;
多项检验。
PROC UNIVARIATE <option(s)>;
BY <DESCENDING> variable-1 <...<DESCENDING> variable-n>
<NOTSORTED>;
CLASS variable-1<(variable-option(s))>
<variable-2<(variable-option(s))>>
</ KEYLEVEL='value1'|('value1' 'value2')>;
FREQ variable;
HISTOGRAM <variable(s)> </ option(s)>;
ID variable(s);
INSET <keyword(s)> </ option(s)>;
OUTPUT <OUT=SAS-data-set>statistic-keyword-1=name(s)
<... statistic-keyword-n=name(s)> <percentiles-specification>;
PROBPLOT <variable(s)> </ option(s)>;
QQPLOT <variable(s)> </ option(s)>;
VAR variable(s);
WEIGHT variable;
Page 65
SAS
PROC UNIVARIATE DATA= SAS-datas-et <option-list>;
选项说明:
VARDEF=选项及说明:
Page 66
SAS应用单变量过程进行多变量分析
proc univariate data= freq normal plot;
var wait quit;
class week;
output out=test mean=mean_w mean_q std=std_w std_q pctlpts=25 50 75 pctlpre=a b ;
run;
Page 67
SAS 拟合密度曲线
第一步:创建一个数据集,随机生成一列正态分布和指数分布数据.
data distrdata;
drop n;
label
normal_x='Normal Random Variable'
exponential_x='Exponential Random Variable';
do n=1 to 100;
normal_x=10*rannor(53124)+50;
exponential_x=ranexp(18746363);
output;
end;
run;
Page 68
SAS
proc univariate data=distrdata noprint;
var Normal_x;
histogram Normal_x /normal(color=yellow w=3 midpercents noprint) cbarline=red
cfill=green ;
inset n max min mean std normal(ksdpval)/pos=ne format=;
title '100 Obs Sampled from a Normal Distribution';
run;
Page 69
SAS
proc univariate data=distrdata noprint;
var Exponential_x;
histogram /exp(fill l=3) cfill=yellow midpoints=.05 to by .25;
title '100 Obs Sampled from an Exponential Distribution';
run;
SAS
综合运用举例
Page 70
第十章
目的:从同一个文件夹中批量导入结构相同的TXT文档到逻辑库,并合并为一个数据集。
Page 71
SAS
/*第一步:用批量上传的过程*/
%macro directory(dir=); /*批量导入TXT文件数据临时数据集, */
%let rs=%sysfunc(filename(filref,&dir));
%let did=%sysfunc(dopen(&filref));
%let nobs=%sysfunc(dnum(&did));
%do i=1 %to &nobs.;
%let name=%qscan(%qsysfunc(dread(&did,&i)),1,.);
%let ext=%qscan(%qsysfunc(dread(&did,&i)),-1,.);
proc import out=&name. datafile="&dir.\&name..&ext" dbms=tab replace;
getnames=yes;
datarow=2;
delimiter='|*|';
run;
%end;
%let rc=%sysfunc(dclose(&did));
%mend;
%directory(dir= txt所在文件夹的物理路径 );
Page 72
SAS
%macro append(out=);
proc contents data=_all_ out=;
run;
proc sql;
select distinct MEMNAME into: ndatasetname separated by ' ' from ;
quit;
%put &ndatasetname.;
%let i=1;
%do %until (%scan(&ndatasetname., &i., ' ')=);
%let dataset=%scan(&ndatasetname., &i., ' ');
%put &dataset.;
%let dsid=%sysfunc(open(&dataset.,i));
%let phone=%sysfunc(varname(&dsid.,1));
*%let msm=%sysfunc(varname(&dsid.,7));
%let name=%sysfunc(varname(&dsid.,7));
%let gender=%sysfunc(varname(&dsid.,10));
%let cardname=%sysfunc(varname(&dsid.,13));
%let callin=%sysfunc(varname(&dsid.,16));
%let date=%sysfunc(substr(&dataset.,19,8));
%put &phone.;
*%put &msm;
%put &name.;
%put &gender.;
%put &cardname.;
%put &callin.;
Page 73
SAS 1、批量导入并合并
%let rc=%sysfunc(close(&dsid.));
data t.&dataset.;
set &dataset.(keep= &phone. /*&msm.*/ &name. &gender. &cardname. &callin. );
length &cardname. $31.;
rename &phone.=phone /*&msm.=msm*/ &name.=name &gender.=gender
&cardname.=cardname &callin.=callin;
if length(&phone.)<8 then delete;
date=&date.;
run;
%if &i.=1 %then %do;
data t.&out.;
set t.&dataset.;
run;
%end;
%else %do;
proc append base=t.&out. data=t.&dataset. force;
run;;
%end;
proc delete data=t.&dataset.;
run;
%let i=%eval(&i.+1);
%end;
%mend append;
%append(out=open_card)
Page 74
SAS 2、多级查询举例
ID WT1 WT2 WT3 WT4 WT5 WT6
E001 155 158 162 149 148 147
E002 110 112 114 107 108 109
E003 127 131 119 115 141 122
E004 188 174 169 166 178 182
Page 75
SAS 3、ARRAY转置数据
ID CON TIME WEITHG
E001 1 1 155
E001 1 2 158
E001 1 3 162
E001 2 1 149
E001 2 2 148
E001 2 3 147
E002 1 1 110
E002 1 2 112
E002 1 3 114
E002 2 1 107
E002 2 2 108
E002 2 3 109
E003 1 1 127
E003 1 2 131
E003 1 3 119
E003 2 1 115
E003 2 2 141
E003 2 3 122
E004 1 1 188
E004 1 2 174
E004 1 3 169
E004 2 1 166
E004 2 2 178
E004 2 3 182
1、很多时候,做数据分析时,需要数据集在上
面两种形式下进行相互转换。
2、即一个观测到多个预测;或是从多个观测到
一个观测之间的转换。
3、遇到这种情况时,可以考虑通过ARRAY数
组来完成。
Page 76
一个观测转换成多个观测
%macro array(name);
proc import out=_&&name.
datafile="C:\Documents and Settings\user\桌面\中科信软SAS培训\逻辑库
\b\"
dbms=excel replace;
sheet=&name.;run;
%mend array;
%array(one);
%array(two);
data _one_a;
set _one;
array weight[2,3] wt1-wt6;
do con=1 to 2;
do time=1 to 3;
weights=weight[con,time];
output;
end;
end;
drop wt1-wt6;
run;
Page 77
多个观测转换成一个观测
proc sort data=_two;
by id con time; run;
data _two_a;
array WT[1:2,1:3] wt1-wt6;
retain WT1-WT6;
set _two;
by id;
if then
do i=1 to 2;
do j=1 to 3;
WT[i,j]=.;
end ;
end;
WT[con,time]=weight;
if then output;
keep ID WT1-WT6;
run;
DATA _two_b;
retain id;
set _two_a;
run;
讲一次等于
学习3次
BY : BY :
Page 79
好书推荐
SAS公司出版的《The power to know》 全英文系列丛书
谢
谢