分享

SAS学习笔记

 Becky_Spencer 2013-04-24
http://blog.csdn.net/chenyi8888/article/category/908775

分类: 数据分析与挖掘 227人阅读 评论(0) 收藏 举报

最近在做SAS转换代码,之前学过,但时间长了有所忘记,为了以后方便查找,所以再次进行复习的时候,对SAS学习进行了简单的记载。

 

SAS常用语法结构

SAS的变量的基本类型

第一:数值型

第二:字符型 变量名后必须使用$说明符

其他数据类型中,日期、时间等变量存为数值型,可以使任意的整数,定点实数、浮点实数等,一般使用8个字节。字符变量默认的长度为8个字符,当然也可以通过length语句指定其长度。Length 字符型变量名 $ 长度

 

对数据处理两大步骤:数据步和过程步

数据步 以data语句开始,以run语句结束;过程步以proc开始,以run语句结束。

 

libname 库标记 '文件夹位置' 选项;

假设C盘目录下,有一个文件夹"user",该文件夹下有一个sas数据集为aa。
那么就是这样执行:
libname a 'c:\user';
proc print data=a.aa;
run;

数据库分两个永久库和临时库:临时库就只有一个:名为WORK,永久库有多个。
指定两个库标记:
SASUSER:
WORK:

每个数据集都有一个两级名,第一级为库标记,第二级是数据集名
格式如下: 库标记.数据集名


DATA语句用于创建和处理数据集。作用有二:
第一:标志数据步调开始
第二:命名将要创建的SAS数据集
格式: DATA 数据集名;的

INFILE 用于从外部文件读入数据,必须出现在INPUT语句之前,主要功能如下:
第一:确定一个包含原始数据的外部文本文件
格式:INFILE '外部文件的所在位置及名称' 选项;


CARDS语句,用于直接输入数据,标志着数据块的开始。
CARDS:
  数据块
;

INPUT语句,用于向系统表明如何读入每一条记录,主要功能:
读入由语句指定的数据列
为相应的数据域定义变量名
确定变量读入模式

格式:
INPUT 变量名 [变量类型 起止列数] ....;


数据的两种输入方式:直接输入和外部输入

SAS程序块
程序总是以PROC开头,后面紧跟程序步名
常用步名如下:
SORT 将指定数据集按指定变量排序
PRINT 将数据集中的数据列表输出
MEANS 对指定的数值变量进行简单的统计描述
FREQ 对指定的分类变量进行简单的统计描述
TTEST 对指定的变量做t检验
ANOVA 对指定的变量做方差分析
NPAR1WAY 对指定的变量做非参数校验
REG 对指定的变量做回归分析
CORR 对指定的变量做相关分析
CHART 绘出低分辨率的统计图
SQL 调用SQL语言

格式:
PROC 过程名 [data=数据集名] [选项];
   该过程的专用语句描述;
   [VAR 变量序列;]
   [WHERE 条件表达式....;]
   [BY 变量序列;]
RUN;

 

SAS各种常用随机函数

随机数函数名

作用

UNIFORMseed

产生(01)区域均匀分布随机数,乘同余发生器

RANUNI(seed)

产生(01)区域均匀分布随机数,素数模发生器

NORMAL(seed)

产生标准正态分布随机数,利用中心极限定理近似公式

RANNOR(seed)

产生标准正态分布随机数,利用变换抽样法

RANEXP(seed)

产生λ=1的指数分布随机数

RANGAM(seed,alpha)

产生伽马分布随机数,alpha>0,seed为任意数值

RANTRI(seed,h)

产生三角分布随机数,0<h<1,seed为任意数值

RANCAU(seed)

产生标准柯西分布随机数

RANBIN(seed,n,p)

产生二项分布随机数,n>0的整数,0<p<1,seed为任意数值

RANPOI(seed,lambda)

产生泊松分布随机数,lambda>0,seed为任意数值

RANTBL(seed,p1,…,p2,…pn)

产生离散分布随机数,0pi1,seed为任意数值

 

分支语句

if 条件 then 语句;

if 条件 then do 语句1;....语句n; end;

if 条件 then 语句; else 语句;

多分支结构:

select(选择表达式);

when(值列表) 语句;

when(值列表) 语句;

.....

otherwise 语句;

end;

select;

when(条件) 语句;

when(条件) 语句;

.....

otherwise 语句;

end;

 

SAS过程步常用命令

title 指定标题

var 指定分析变量

class 指定分类变量

model 指定模型形式

means 产生简单统计量

plot 绘制散点图

print 列出数据集内容

sort 按变量值进行排序

by 指定变量分组

output 指定输出结果存放的数据集

Freq 指定一个重复变量

where 选择数据集的子集

label 临时标签

 

 

我们这里给出了RETAIN语句几种常用的使用格式:

l Retain;

l Retain  T1  T2  T3;

l Retain  T1  T2  T3  100;

l Retain  T1  T2  T3  (100 );

l Retain  T1  T2  T3  (100  99  98 );

第一种使用格式表示用INPUT语句或赋值语句创建的所有变量从DATA步的这次执行到下一次重复时被保留。第二种使用格式规定了变量名字,变量列表或数组名,它们的值是用户想保留的。第三种使用格式表示一个变量列表T1T2T3接受同一个初始值100。第四种使用格式是将初始值100用小括号括起来,SAS系统将分配括号中的这个值给变量列表中的第一个变量,即T1=100,其它T2T3为缺失值。第五种使用格式给出了初始值列表,将依此分配初始值列表中的值给变量列表中各个变量,即T1=100T2=99T3=98

 IN=选项

格式:SAS-data-set(IN=variable)

一个临时的数字类型的变量,其值为0或1

IN选项,当读入多个SAS数据集时,用IN选项可以确定本观测数据来自那个数据集。

variable=0表示观测不是来自本数据集

variable=1表示观测是来自本数据集

 

SAS聚类分析
PROC CLUSTER <数据集名> METHOD=NAME <options>;//必须语句
VAR
COPY
RMSSTD
ID
BY
FREQ
以上是可选择语句

if语句
data;
if x>y then
   put "x>y";
else
   if x<y then
      put "x<y";
   else
      put "x=y";
run;

for语句
do 计数变量=初始值 to 终止值 by 步长;
   ....;
end;


do while (循环条件表达式);
  .....;
end;

do until (循环条件表达式);
.....;
end;


= eq
< lt
> gt
< = le
> = ge
<> ne

set语句 表示从那个数据集里读入数据
格式:set 数据集名;

删除/增加变量或观测值
data Car;
set SASUSER.Car;
drop ID;
run;

data Car;
set SASUSER.Car;
keep Q1 B1 B2;
run;

 

数据拆分

data SASUSER.Car_low SASUSER.Car_high;
set SASUSER.car;
select;
when (B1<=2) output SASUSER.Car_Low;
otherwise  output SASUSER.Car_high;
end;
run;

数据合并有两种:纵向和横向
data SASUSER.Car_total;
  set SASUSER.car_low SASUSER.car_high;
run;


proc sort=SASUSER.student_profile;
by ID;
run;
proc sort=SASUSER.student_score;
by ID;
run;
data SASUSER.student_total;
merge SASUSER.student_profile SASUSER.student_score;
by ID;
run;

proc print;run;

数据清洗
一般用proc sql的方式
数据修正
数据标准化
数据尺度变换 如:原始数据十分制变成百分制
数据更新 update

 

proc rank 其实最主要的是掌握那几个选项,该proc 的整体语法结构如下:

           proc rank <选项>;
                var 变量;
                ranks 新变量名字;
                by 分组变量;
           run;

 这是一个整体的语法结构,举例,比如说我要对sashelp中的height排名次:

          proc rank data=sashelp.class out=result;
               var height;
          run;
很显然就是这样写,用var来指定要排名次的变量,但是你运行该程序后会发现一个问题,就是原来的height的值都被名次代替了。如果我想保留原来的height值,那就需要用ranks语句了:
         proc rank data=sashelp.class out=result;
              var height;
              ranks r_height;
         run;
这样原来的height变量就不会动,生成名次变量r_height,这就是ranks的作用。

例子:

proc rank descending out=oE11;

var compsit;

ranks rankcompsit;

proc sort; by rankcompist;

proc print data=oE11;

run; 

 

均值
data;
x=mean(89,90,78,98,87,76,69,90,92,88);
put '均值=' x;
run;

均值统计里有两个概念:截尾均值和缩尾均值
前者是去掉最大N个和最小N值后的平均值
后者是最小的N个值用第N+1小的那个数值替换,同时也把最大的N个值用第N+1大的那个数值替换,然后计算均值
用univariate过程计算上述两种均值
data null;
input score@@;
cards;
89 90 78 98 87 76 69 90 92 88
;
proc univariate data=null trimmed=2 winsorized=2;
var score;
run;


中位数
如果数据个数是奇数,中位数是处于正中心位置的数值;如果数据个数是偶数,中位数则是处于正中心位置的两项数据的平均数
data;
x=median(89,90,78,98,87,76,69,90,92,88);
put '中位数=' x;
run;


分位数
就是分等分。在实际应用中四分位应用最为广泛。
在SAS中 Q1表示处于25%,Q3表示处于75%
data null;
input score@@;
cards;
89 90 78 98 87 76 69 90 92 88
;
proc means data=null q3 q1;
var score;
run;


众数
指数据中出现次数最多的数值。
data null;
input score@@;
cards;
190 188 188 185 183 183 180 180
180 180 177 175 175 174 173
;
proc univariate data=null modes;
var score;
run;


离散程度
集中趋势概括数据可以使人们在大体上对数据产生初步的印象,但是这些指标对数据进行高度抽象的同时,也忽略了一些必要的数据信息,使得
人们在某些情况下只能看到数据呈现出来的假象,而不能读懂其真正的内在涵义。
指标有级差、平均差、四分位差、异众比率、方差、标准差、标准误差及离散系数

级差
是数据最大值减去最小值所得的差
data;
x=range(89,90,78,98,87,76,69,90,92,88);
put '级差=' x;
run;

四分位差
具体指第3个四分位数减去地1个四分位数得到的差
其值越小,说明中间的数据越集中
data null;
input score@@;
cards;
190 188 188 185 183 183 180 180
180 180 178 177 175 175 174 173
;
proc means data=null qrange;
var score;
run;

 

方差

用全体数据进行计算的,因此它反映了所有数据相对于数据中心发散的平均程度。方差的算术平方根就是标准差。
data;

x=var(89,90,78,98,87,76,69,90,92,88);

y=std(89,90,78,98,87,76,69,90,92,88);

put '方差=' x '标准差=' y;

run;

 

标准误差
它的样本均值的标准差。在进行数据抽样中,由于随机性的存在,采用同一种抽样方法在不同的时间、地点、环境等条件下进行多次抽样,可能得到多个不同的样本数据。

标准误差不是观测值的实际误差,也不是误差范围,它只是对一组观测数据可靠性的估计。标准误差越小,则观测到可靠性大,反之则不大可靠。多数应用都用标准误差来评价数据的测量精度。

data;

x=stderr(89,90,78,98,87,76,69,90,92,88);

put '标准误差=' x;

run;

 

变异系数

变异系数是衡量相对离散程度的一个重要指标。具体是指一组数据的标准差与其相应的均值之比,变异系数越小,说明数据的离散程度越小。

举例说明,身高和体重差异如何进行对比?直接采用标准差是无法进行对比的,因为标准差是带有单位的,身高的单位是厘米,体重的单位是千克,不同的单位的统计量对比起来是没有任何意义的。为此,采用变异系数来消除量纲即计量单位的影响,进行对比。

 

 data;

height=cv(157,170,161,184,184,168,166,158,174,166,173,189,188,163,161,189,183,186,188,155);

weight=cv(61,71,74,59,71,55,73,66,50,57,48,68,73,52,60,56,53,67,73,64);

put '身高的变异系数=' height '体重的变异系数=' weight;

if height>weight then

      put '身高比体重的差异大';

else

      if height<weight then

           put '身高比体重的差异小';

      else

           put '身高比体重的差异相当';

run;

 

分布形状

在对数据进行概括性的分析时,考察集中趋势和离散程度是两个重要方面,但并非仅此而已。就像对一个人进行评价一样,不仅要考察人的高矮情况,也考考察胖瘦情况,更要看看一个人是否站有站相,坐有坐相。对于数据的分布状况,也要进行概括性的分析,才能掌握数据的全貌。

数据分布的测度主要考察数据分布的偏斜程度、扁平程度,以及数据分布是否对称,其指标主要有偏度和峰度两类。

 

偏度

是对数据分布对称性的测度。通常采用三阶中心矩的计算方法,其主要考察离差三次方之和与标准差的三次方的比例。

如果数据是对称的,则偏度等于0;如果偏度明显不等于0,则表明数据分布是非对称的,具体地说,偏度大于0时,均值右边的数据更为分散,表明数据右偏;偏度小于0时,均值左边的数据更为分散,表明数据左偏。

data;
x=skewness(190,188,188,185,183,183,180,180,180,180,178,177,175,175,174,173);
put '偏度=' x;
run;

 

峰度

用来反映数据分布曲线顶端陡峭或偏平程度的指标。这里所说的陡峭或偏平是针对标准正态分布而言的。

data;
x=kurtosis(190,188,188,185,183,183,180,180,180,180,178,177,175,175,174,173);
put '峰度=' x;
run;

 

sas利用FREQ、MEANS、UNIVARIATE过程进行描述统计分析。

proc freq <选项>;

by 变量/变量列表;

exact 统计选项</计算选项>;

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多