SAS软件学习

SAS for windows

因 CSDN 不支持 SAS语法注释(*与;),以下代码段注释以 python 中 # 代替

SAS入门

1.系统特点
灵活方便、简单易学、扩展性强、适用性强等。
2.结构组成

系统结构 应用
Base SAS SAS系统的基础,提供SAS数据库管理功能
SAS/STAT 统计分析模块
SAS/ETS 计量经济与时间序列分析
SAS/OR 运筹学和工程管理
SAS/QC 质量控制模块
SAS/IML 矩阵运算模块
SAS/GRAPH 绘图模块

表的列为变量,行为观察

3.SAS程序

主要步骤 作用
DATA步 产生SAS数据集
PROC步 对数据进行分析处理
libname saslib base 'c:\sas\data'; #创建逻辑库名称saslib,存放位置'c:\sas\data'
#数据产生段
data saslib.Inventory; #在saslib这个逻辑库中,建立了Inventory这个数据集
    Input Product_ID $ Instock Price; #输入三列,$代表前面product是字符串
    Datalines; #认为创建数据停止
P001R 12 125.00 #数据输入
P003T 34 40.00
P301M 23 500.00
;
#数据处理段
proc print data = saslib.inventory; #打印,数据集名称不区分大小写
run;

对单个数据集的处理

操作 作用
set 纵向操作
merge 横向操作
modify 修改数据
update 更新数据

1.选取部分变量/部分观测

#数据产生段
data work.shoes_part1; %work-临时数据集 命名为shoes_part1
    set sashelp.shoes (keep = Product Stores Sales);  #设置值(来源于sashelp逻辑库),keep保持三列
run; #运行
#数据处理段
proc print data = work.shoes_part1 (obs = 5) noobs;   #obs-只要前5个观察 noobs不要看obs序列
run;

2.循环

#数据步
data work.square;#临时逻辑库work下创建名称为square的数据集
    do x = 1 to 5 by 2; #创建数据,步长2
        y = x**2;
        output; #输入到square数据集里
    end; #结束循环
run;
#处理步
proc print data = work.square;
run;

3.分组与排序

# 数据步
data work.identity;
    input id sex $ age; #三个数据列
cards; #卡片形式列出来
1001 f 20
1003 m 22
1002 m 20
1001 f 21
;
#处理步
proc sort data = work.identity; #排序
    by id; #依据id数据值从小到大排列,在work逻辑库中保存处理过后的数据
run;
# 数据步
data work.score;
    input id language $ score;
cards; #卡片形式列出来
1001 English 90
1002 Chinese 93
10001 France 83
;
#处理步
proc sort data = work.score;
    by id;
run;
#数据步
data work.merge_result; #临时逻辑库里创建数据集merge_result
    merge identity score; #合并identity和score数据集
    by id; #通过id合并
run; #生成
#结果步
proc print data = work.merge_result;
run;

对多个数据集的处理

1.数据集的纵向串联
Q:变量个数(列)是否相同?数据是否相同?
A:变量个数或者名称不同,串接时自动对没有的数据进行null值。

方法一:数据步set的命令
方法二:过程步append命令

#数据集1 4*3
data work.Old_Employee;
    Input Emp_ID $ Emp_Name $ Gender $;
    datalines;
EQ122 Molly F
ET121 Dillon M
ET124 Helen F
ED123 John M
;
run;
#数据集2 4*3
data work.New_Employee;
    Input Emp_ID $ Emp_Name $ Dept $;
    datalines;
ET001 Jimmy TSG
ED003 Emy DSG
EC002 Alfred CSG
EQ004 Kim OSG
;
run;
#数据集1操作
proc print data = work.Old_Employee;
    title 'Old Employee';
run;
#数据集2操作
proc print data = work.New_Employee;
    title 'New Employee';
run;
#数据集3-纵向串联 -没有的值自动赋了空值
data work.Employee;
    set work.Old_Employee work.New_Employee;
run;
#数据3操作
proc print data = work.Employee;
    title 'All Employee';
run;

2.数据集的横向合并

方法:merge(+by)语句

#数据集1
data work.data1;
    Input Year VarX $;
    datalines;
1996 X1
1997 X2
1998 X3
1999 X4
2000 X5
;
run;
#数据集2
data work.data2;
    Input Year VarY $;
    datalines;
1996 Y1
1996 Y2
1998 Y3
1999 Y4
2000 Y5
;
run;
#数据步
#无by语句-如果不同,后面的数据集的取值会覆盖前面一个数据集的取值
data work.combined1;
    merge work.data1 work.data2;
run;
#有by语句-不会覆盖,会累加行
data work.combined2;
    merge work.data1 work.data2;
    by Year;
run;

通常数据列是有序的,即先排序,后横向合并

通过GPLOT过程制作图形

画图-比较-分析

1.制作散点图

proc gplot data = sashelp.class; #gplot,默认+号标记
    title 'height and weight in class'; #命名
    plot height*weight; #纵向身高,横向体重
run;
quit;

2.连线图

symbol value = dot cv = red #dot表示点 red点的颜色 
    interpol = join ci = blue; #join直线 blue线的颜色
proc gplot data = sashelp.class;
    title 'height and weight in class';
    plot height*weight;
run;
quit; #停止
goptions reset = all; #所有值为默认值状态

描述性统计分析

* 在对一组统计数据的分布变化进行深入研究之前,首先需要研究一组数据的特征。为了比较精确地描述一组统计资料的特征,需要使用一些统计指标来描述它。一组数据的统计特征通常包括下三大类:
> 描述数据集中趋势
> 描述数据离散程度
> 描述数据分布

* UNIVARIATE 过程对数值变量给出比较详细的变量分布的描述,其中包括:
> 描述性统计量:数据观察的数量,均值,标准差,中位数等
> 假设检验:分析变量是否服从正态分布,t检验 和 f检验
> 分布拟合假设检验:拟合优化检验,更加严格判断是否是正态分布

UNIVARIATE过程

#数据
data shool; #一般生成在临时逻辑库里
input height @@; 
#@:换行后指针移到下一个观测值,两个@@:换行后指针保持到当前记录
#这里数据读入是一列
cards;
170.7   174.1   166.7   179.7   171.0   168.0   177.3   174.5
174.1   173.3   169.0   173.5   173.1   177.5   180.0   173.2
173.1   172.4   173.6   175.3   181.5   170.8   176.4   171.0
171.8   180.7   170.7   173.8   164.9   170.0   177.7   171.4
163.5   178.8   174.9   178.3   174.1   174.3   171.4   173.2
173.7   173.4   174.2   172.9   176.9   168.3   175.1   172.1
166.8   172.8   168.8   172.5   172.8   175.2   170.9   168.6
168.6   169.1   168.8   172.0   168.2   172.8   169.1   173.6
169.6   172.8   175.7   178.8   170.1   175.5   171.7   168.6
171.2   170.1   170.7   173.6   167.2   170.8   174.8   171.8
174.9   168.5   178.7   177.3   165.9   174.2   170.2   169.5
172.1   178.1   171.2   176.0   169.8   177.9   171.6   179.4
183.8   168.3   175.6   175.9   182.2
;
#下面过程步,输出信息量特别大。
proc univariate data=shool normal plot; 
    #normal检验分析变量是否服从或近似正态分布
    #plot画图
    var height;
    #针对变量为身高
    #默认状态
run;

方差分析

用于检验两组或者两组以上的样本的均值是否具备显著性差异的一种数理统计方法。

proc format; 
    value group 1='烫伤对照组' 2='休克期切痂组' 3='非休克期切痂组' ;
run;

data temp;
do i=1 to 10;
    do g=1 to 3; #g代表变量
        input x@@; 
        output; 
    end; 
end;
format g group.; #有没有.反应的是生成数据的格式,有.就是中文名称,没有的话,就是数字符号
cards;
7.76        11.14       10.85
7.71        11.60        8.58
8.43        11.42        7.19
8.47        13.85        9.36
10.30      13.53         9.59
6.67        14.16        8.81
11.73       6.94         8.22
5.78        13.01        9.95
6.61        14.18       11.26
6.97        17.72        8.68
;

proc anova data = temp;  # anova单因素的方差分析函数,多因素的呢?
    class g;  #制定效应因子变量
    model x = g;  #效应变量的模型结构
    means g; #对应三组的均值
run;

主成分分析

把给定的一组相关变量通过线性变换转变成另一组不相关的变量,这些新的变量按照方差依次递减的顺序排列。
在数学变换中保持变量的总方差不变,使得第一变量具有最大的方差,称为第一主成分,第二变量的方差次大,并且和第一变量不相关,称为第二主成分。依次类推,I个变量就有I个主成分。
主成分分析是把原来多个变量划为少数几个综合指标的一种统计分析方法,是一种降维处理技术。

# 数据集
data exm_00;
    input x1 x2 x3 y;
cards;
51.3    73.6    36.4    2.99
48.9    83.9    34.0    3.11
42.8    78.3    31.0    1.91
55.0    77.1    31.0    2.63
45.3    81.7    30.0    2.86
45.3    74.8    32.0    1.91
51.4    73.7    36.5    2.98
53.8    79.4    37.0    3.28
49.0    72.6    30.1    2.52
53.9    79.5    37.1    3.27
48.8    83.8    33.9    3.10
52.6    88.4    38.0    3.28
42.7    78.2    30.9    1.92
52.5    88.3    38.1    3.27
55.1    77.2    31.1    2.64
45.2    81.6    30.2    2.85
51.4    78.3    36.5    3.16
48.7    72.5    30.0    2.51
51.3    78.2    36.4    3.15
45.2    74.7    32.1    1.92
;
#处理段
proc princomp data=exm_00 out=out1  prefix=z; #主成分分析函数princomp,out-有原来数据集,和处理后的得分,prefix取新的名字,z1,z2,z3
    var x1-x3; #考虑的变量,x1,x2,x3
run;
#处理段
proc print data = out1;
    title 'output:out1';
run;

聚类分析

聚类分析是将随机现象归类的统计学方法。
聚类分析也称为群分析、点群分析,它是研究分类的一种多元统计方法。
这些问题的本质就是希望能找到一种合理的方法将一批研究对象按其所属特性分门别类。

  1. 距离
  2. 类间距离
  3. 相关系数:用来描述两个指标之间的相似程度,它是一个无量纲统计量(一般归一化)。在指标聚类分析中,两个指标变量之间的相关系数越大,说明这两个指标变量的性质越相似。
  4. 类间相似系数:夹角余弦 相关系数,与相似系数不同

FASTCLUS过程
> 用于大样本样品聚类的FASTCLUS过程步使用的是逐步聚类法,其聚类原则是使得类间距离最小。
> 和FASTCLUS过程步的缺点是:

  • 没有将原始数据标准化的功能
  • 不能自动确定类别数
  • 需要确定初始凝聚点
  • 不能输出作树状图的聚类信息

划分法(K-均值聚类法)

data ex_11;
    input x1-x8; #八个变量,30个观测
cards;
7.78  48.44  8   20.51  22.12  15.73  1.15  16.61
10.85 44.68  7.32 14.51  17.13  12.08  1.26  11.57
9.09  28.12  7.4  9.62  17.26  11.12  2.49  12.65
8.35  23.53  7.51  8.62  17.42  10  1.04  11.21
9.25  23.75  6.61  9.19  17.77  10.48  1.72  10.51
7.9  39.77  8.49  12.94  19.27  11.05  2.04  13.29
8.19  30.5  4.72  9.78  16.28  7.6  2.52  10.32
7.73  29.2  5.42  9.43  19.29  8.49  2.52  10
8.28  64.34  8   22.22  20.06  15.52  0.72  22.89
7.21  45.79  7.66 10.36  16.56  12.86  2.25  11.69
7.68  50.37  11.35 13.3  19.25  14.59  2.75  14.87
8.14  37.75  9.61  8.49  13.15  9.76  1.28  11.28
10.6  52.41  7.7   9.98  12.53  11.7  2.31  14.69
6.25  35.02  4.72  6.28  10.03  7.15  1.93  10.39
8.82  33.7  7.59  10.98  18.82  14.73  1.78  10.1
9.42  27.93  8.2   8.14  16.17  9.42  1.55  9.76
8.67  36.05  7.31  7.75  16.67  11.68  2.38  12.88
6.77  38.69  6.01  8.82  14.79  11.44  1.74  13.29
12.47 76.39  5.52  11.24  14.52  22  5.46  25.5
7.27  52.65  3.84  9.16  13.03  15.26  1.98  14.57
13.45  55.85  5.5  7.45  9.55  9.52  2.21  16.3
7.18  40.91  7.32  8.94  17.6  12.75  1.14  14.8
7.67  35.71  8.04  8.31  15.13  7.76  1.41  13.25
9.98  37.69  7.01  8.94  16.15  11.08  0.83  11.67
7.94  39.65  20.97 20.82  22.52  12.41  1.75  7.9
9.41  28.2   5.77  10.8  16.36  11.56  1.53  12.17
9.16  27.98  9.01  9.32  15.99  9.1  1.82  11.35
10.06 28.64  10.52 10.05  16.18  8.39  1.96  10.81
8.7   28.12  7.21  10.53  19.45  13.3  1.66  11.96
6.93  29.85  4.54  9.49  16.62  10.65  1.88  13.61
;

proc fastclus data=ex_11 maxc=5 maxiter=20 out=clus; #maxc最多分为5类,maxiter最多迭代次数,out指定输出数据集
    var x1-x8; #针对变量对象考虑
run;

proc tree data=tree horizontal;
    id _name_;
run;

CLUSTER过程

层次聚类 PROC CLUSTER DATA=OUTPUT=METHOD=STANDARD NONORM RSQUARE[选项]
VAR

data ex_22;
    input id x1-x16;
    cards;
1 0.7728 18.8701 0.0000 0.7695 0.0000 44.9435 0.0000 16.5758 0.0000 0.0000 7.6919 2.1239 4.9656 3.0461 0.0000 0.0000
2 0.8642 19.9263 0.0000 0.8119 0.7419 45.9775 0.0000 13.6080 0.0000 0.0000 8.5596 1.5317 5.0254 1.3041 0.0000 0.0000
3 0.8243 21.0977 0.0000 0.4241 0.7293 45.1447 0.0000 15.6668 0.0000 0.0000 7.5724 1.8285 4.2709 1.4724 0.0000 0.0000
4 0.9229 20.0757 0.0000 0.7015 0.7018 44.3025 0.0000 15.9571 0.0000 0.0000 7.8116 1.9555 4.1090 1.6377 0.0000 0.0000
5 0.8873 20.7261 0.0000 0.4812 0.8167 45.7282 0.0000 14.6814 0.0000 0.0000 7.9308 1.9205 4.2299 1.5044 0.0000 0.0000
6 0.6894 10.1021 0.8601 2.8247 0.0000 11.0901 2.2253 14.7233 1.2605 1.6238 29.8684 1.4462 16.0572 4.6744 1.5475 0.9376
7 0.6287 17.4562 0.0000 0.8787 0.0000 51.1227 0.0000 16.6821 0.0000 0.0000 6.7399 1.3021 3.6787 1.0890 0.0000 0.0000
8 1.7146 21.0712 1.2745 6.9323 0.0000 11.9821 0.0000 14.2464 0.8387 1.1903 22.3226 1.0350 11.1513 3.2862 1.0540 0.6633
9 0.8440 20.7948 0.0000 0.5289 0.7024 42.4289 0.0000 17.1255 0.0000 0.0000 8.5508 1.9223 4.6346 1.3074 0.0000 0.0000
10 0.9797 23.4313 0.0000 0.4778 0.7890 43.9119 0.0000 14.5129 0.0000 0.0000 7.4513 1.7509 4.0373 1.4142 0.0000 0.0000
11 0.9811 23.5269 0.0000 0.4989 0.8375 42.3814 0.0000 14.8207 0.0000 0.0000 7.5800 1.8551 3.9729 1.3863 0.0000 0.0000
12 1.0560 17.4586 1.0481 1.1591 0.6113 15.8986 2.1618 13.1660 1.1251 1.2887 23.9812 1.5252 11.7911 3.5647 1.2011 0.7989
13 0.3342 10.9218 0.0000 0.9379 0.0000 30.5689 0.0000 16.1205 0.8614 0.9350 20.0491 2.4606 10.9263 2.9423 0.9680 0.5866
14 1.3816 15.9731 1.0270 1.2106 0.5663 20.0942 2.1881 11.7304 1.1318 1.3370 23.1882 1.3790 11.7141 3.5635 1.1838 0.7657
15 1.3435 23.1294 1.2489 0.8939 0.0000 12.3388 2.0595 12.1598 1.1842 1.3267 23.9904 1.1520 11.9333 3.6034 1.1375 0.7110
16 2.3861 19.7456 0.0000 0.9093 0.3389 68.8572 0.0000 4.9522 0.0000 0.0000 0.0000 1.6429 0.0000 0.0000 0.0000 0.0000
17 1.6180 23.5786 0.0000 2.6597 0.0000 12.3110 0.0000 14.0923 0.8883 1.2167 23.3105 1.3039 11.7462 3.4875 1.1042 0.6779
18 1.0469 23.6999 0.0000 0.7698 0.7172 49.0165 0.0000 12.1561 0.0000 0.0000 5.5289 2.2450 2.8850 0.9707 0.0000 0.0000
19 0.7539 13.0284 0.0000 2.2978 0.8085 30.6336 0.0000 10.4001 0.8754 1.4161 20.6589 2.4703 10.2990 2.9556 0.9522 0.6328
20 1.3813 23.0962 0.0000 1.7688 0.0000 21.8800 0.0000 14.6781 0.7285 0.9902 18 5709 1.5253 9.5387 2.8917 1.0169
21 0.4162 8.6635 0.0000 1.4322 0.6001 28.0838 0.0000 13.7243 1.0979 1.5293 22.6316 2.6314 12.3223 3.4616 1.1200 0.7169
22 2.0717 21.1906 0.0000 1.1577 0.6255 66.8966 0.0000 5.6805 0.0000 0.0000 0.0000 1.6632 0.0000 0.0000 0.0000 0.0000
23 1.0133 17.2585 0.0000 1.1623 0.6673 19.7117 0.0000 14.8122 1.0789 1.3638 23.0015 1.7719 11.4394 3.3958 1.0658 0.6366
24 0.3346 7.0428 0.0000 1.1386 0.5445 27.0624 0.0000 14.2519 1.1650 1.4980 23.8449 2.5176 13.2688 3.6558 1.1239 0.7382
;
proc cluster data=ex_22 method=average outtree=tree;
    var x1-x16;
    id id;
run;

proc tree data=tree horizontal;
    id id;
run;

回归分析

相关分析与回归分析的异同
相关分析和回归分析是研究现象之间相关关系的两种基本方法。所谓相关分析,就是用一个指标来表明现象间相互依存关系的密切程度。
因果分析:有没有英国分析。

data exm_33;
input x1 x2 @@;
cards;
1.21 3.90 1.30 4.50 1.39 4.20 1.42 4.83 1.47 4.16
1.56 4.93 1.68 4.32 1.72 4.99 1.98 4.70 2.10 5.20
;
proc gplot;
plot x2*x1='*'; #纵坐标
run;
proc corr; #相关系数
var x1 x2;
run;
data exm_44;
    input x1 x2 x3 y;
    cards;
51.3    73.6    36.4    2.99
48.9    83.9    34.0    3.11
42.8    78.3    31.0    1.91
55.0    77.1    31.0    2.63
45.3    81.7    30.0    2.86
45.3    74.8    32.0    1.91
51.4    73.7    36.5    2.98
53.8    79.4    37.0    3.28
49.0    72.6    30.1    2.52
53.9    79.5    37.1    3.27
48.8    83.8    33.9    3.10
52.6    88.4    38.0    3.28
42.7    78.2    30.9    1.92
52.5    88.3    38.1    3.27
55.1    77.2    31.1    2.64
45.2    81.6    30.2    2.85
51.4    78.3    36.5    3.16
48.7    72.5    30.0    2.51
51.3    78.2    36.4    3.15
45.2    74.7    32.1    1.92
;

proc reg;
    model y=x1 x2 x3;
run;
########################
model y=x1 x2 x3/influence;
model y=x1 x2 x3/clmcli;
########################

猜你喜欢

转载自blog.csdn.net/richard__ting/article/details/80957009
SAS