SAS摘要

来源:互联网 发布:开发直播软件多少钱 编辑:程序博客网 时间:2024/05/16 05:19

SAS摘要

一、

Sas statistical analysis system

核心base sas软件

数据管理与统计分析融为一体

Sas分为两个步骤:data步和proc步分别进行数据管理与统计分析

三个窗口:pgm/log/output------快捷键对应f5 f6 f7

Log提示:红色--错误 蓝色--正常 绿色--警告、

编辑命令:clear/Ctrl+e---清除

Recall/f4 --

Submit/f8

Home

注意1:一个完整的SAS程序必须以RUN语句结尾方能提交运行

X1-xn(带序号变量) x1--d(不带序号变量)  引出‘-’和‘--’区别

_numeric_ 数值变量  _character_字符变量  _all_所有变量

二、

计算生日函数mdy(m,d,y)

Informat输入格式

Format输出格式

在默认情况下,SAS系统以0代表1960110时。

其它日期在SAS系统中被存储为与该日期相差的天数。

变量类型转换:

字符自动转换为数值 数值自动转换为字符

函数input将字符转换为数值

1)字符转换数值用input函数:例:

Data a;

X=39.8;

Y=input(x,4.1);

Put x= y=;

Run;

2)数值转换为字符时用put:

Data a;

X=255789;

Y=put(x,$8.);

Put y;

Run;

 

Data a;

y=input(“12345”,5.2);

Run;

函数put将数值转换为字符


下面是各运算符的优先等级(排在前面的优先):    

1级   **^(not)

    2级   */

    3级   +-

    4级   <<==^=>>=^>^<

    5级   &(and)

    6级   |(or)

Sum(of x1-x5)====Sum(of x1 x2 x3 x4 x5)====Sum(x1,x2,x3,x4,x5)

三、

数据中间包含空格读入时用comma.bz.格式读入

一行表示一个观察(Observation),一列表示一个变量(Variable)。

Input语句的五种读入方式。

1.简单方式(自由方式);

2.列方式;

3.格式化方式;

4.列表方式;

5.命名方式

 

@

执行下一个INPUT语句时指针移到下一记录行,要求一条记录必须对应一个数据行

@@

执行下一个INPUT语句时指针保持在当前记录行,不要求一条记录对应一个数据行

 

Length定义字符变量长度

如果数据不是以空格分隔的,而是以制表符分隔(常见的情况是:将excel数据直接拷贝到文本文件中),则应在infile语句中加入选项:expandtabs

如:

   DATA da2;

INFILE c:\mydata\id.txtexpandtabs;

INPUT name $ phone;

RUN;

Data 步运行机制:针对每个观察执行一次所有语句;相当于内部循环。

永久数据集建立:

libname mydata ‘d:\sasdata’;

保存SAS数据集到指定逻辑库中(用法:

      逻辑库名.数据集名;

 

例如:

        data  mydata.cancer;

            input id x;

            cards;

             112  68

             113  80

            ;

         run;

)

临时数据集---保存在work逻辑库

pointer-control(指针控制)

  @n        移动指针到第n.

  @(expression)  移动指针到表达式所指定的列.

  #n      移动指针到第n.

  #(expression)   移动指针到表达式所指定的行.

  @ | @@              指针保持在当前行当前位置.

 

四、

Datalines

Firstobs/obs=数字

DROP=variable(s) KEEP=variable(s)  RENAME=(old-name1=new-name1 <old-name2=new-name2> )

 

 

$char14.等价于$14.,如果在读入数据中包含空格,则可以后面加数据占列数,否则读入在空格处会断裂。

 

 

五、

自定义格式:

Proc format;

Invalue 格式名 格式;

Value 格式名 格式;

对于Invalue而言,替换的数据如果为字符类,则格式名前面加$,否则不加;使用方法,先定义,然后在input语句中用格式名调用;

对于有关大小写替换时,如果不考虑大小写,要全部替换的话,需要用格式名(upcase);

对于value而言,原始值为数值时,则为数值型格式;否则为字符型格式,此时格式名前需加$符号。使用方法,在新创立的数据集中set原数据集,然后使用format输出格式用定义的格式名即可。

缺失值表示及读取

1.空格表示缺失值的数据适合列方式读入;

2.小数点表示缺失的数据适合自由方式读入。

3.其它特殊符号表示缺失值的数据适合自由方式读入+Missing语句申明特殊符号。

SAS系统产生的缺失值:(三种情况)算术运算、非法运算符、非法字符转换为数值。

 

六、

Delimiter

MISSOVER

阻止INPUT语句从下一个数据行读入数据,未赋值的变量设为缺失。

FLOWOVER

规定当需读入数据的长度超过行尾时,超出部分在下一行继续读入。缺省状态为FLOWOVER

TRUNCOVER

当使用列输入或格式化读入方式时,某些数据行长度小于其他数据行长度时,使用TRUNCOVER选项,阻止SAS读入下一行数据

一个外部文件包含变长数据如下:

1

22

333

4444

55555

默认为:Flowover

data nums;

infile "d:\mytest.txt" ;

input test1 5.;

run;

data nums;

infile "d:\mytest.txt" missover;

input test1 5.;

run;

data nums;

infile "d:\mytest.txt" truncover;

input test1 5.;

run;

上述三种选项输出结果

 

 

七、

 

 

DIMn(数组)DIM(数组, n)n指数组的第几维,返回指定维的长度

Lboundn(数组)n指数组的第几维,获取维数下标起始

Hboundn(数组)n指数组的第几维,获取维数上标结束

Do while(条件);

End;

Do until(条件);

End;

 

 

Drop keep用于过程中后面没有等号直接跟多个变量名。

 

 

CONTINUE语句停止当前的循环过程,继续进行下一次循环。

 

 

八、

Proc sort data=数据集1  out=数据集2;

By 变量;

使用BY语句进行匹配合并,要求先排序!

转置例子:

proc transpose data=health out=thealth;

   id name;          /*指定转置后的变量名*/

   var  id  weight;

run;

九、

1.计量资料描述:

MeansUnivariate

1

Proc means [options][statistic-keywords];

[options]:noprint maxdec=n alpha=value(默认0.05)

[statistic-keywords]:std ste=derr min max mean sum cv qrange p25 p75 median

Clm lclm uclm

2

PROC UNIVARIATE  [options];

[options]DATA=SAS-data-set:指定分析的数据集

NORMAL:进行正态性检验

3)分位数选项

PCTLPTS=percentiles

      指定需要输出的任意分位数

PCTLPRE=prefixes

      指定新建变量名的前缀用于保存输出的分位数,变量名将以前缀和分位数数值命名

 

例如,

OUTPUT   OUT=MYPCT    PCTLPTS=2.5  28  35.8    PCTLPRE=PP;

t检验

PROC TTEST <options> ;    #调用Ttest过程

    CLASS variable ;                #两样本比较时,指定分组变量

    PAIRED variables ; (例: paired  x1*x2;)            #进行配对t检验

    VAR variables </ options> ; #指定数值型分析变量

1)进行配对资料比较时,可利用各对子的差值d与零均数进行比较来实现的。因此对于差值变量d,可采用Means过程,Univariate过程,及Ttest过程的Var语句;

2)对于未求差值的两个配对变量,也可以采用Ttest过程的Paired语句。

例:data ex2;

input x1 x2;

   d=x1-x2;

cards;

110  90

115  116

133  101

133  131

126  110

108  88

110  92

110  104

140  126

104  86

120  88

120  112

;

方法一:

proc means  n mean std  t  probt;

  var d;

run;

方法二:

proc univariate;

  var d;

run;

方法三:

PROC TTEST data=ex2 ;

     var   d ;

RUN;

方法四:

PROC TTEST data=ex2 ;

    PAIRED    x1*x2 ;

RUN;

2.分类资料描述和freq过程

FREQ过程可用于以下分析

一是统计描述,产生频数表和列联表,可简洁地描述数据;

二是统计推断,产生各种统计量,可分析变量间的关系,如进行卡方检验等

PROC FREQ <options> ; #调用过程

   TABLES requests </ options> ; #指定制表方式,重要语句

   WEIGHT variable; (很重要,不要落掉)

 

1)语法

              TABLES   request(s)   </ option(s)>;  

关键语句,指定输出n维统计表的方式:

一维表:直接列出变量名,如: Tables   sex   grp;

二维表:用*连接两个变量,如:Tables  sex*grp;

三维表:用*连接三个变量,如:Tables  sex*grp*res;

如果省略TABLES语句,则对所有变量生成一维表

可以使用多条TABLES语句

说明:

 。Tables  a;           对指定变量a产生一个一维频数表;

 。Tables  a*b;     产生以b为列、a为行的二维列联表;

 。Tables  a*b*c;   产生以c列、b为行、a为分层的三维列联表。这里,按照a的不同取值形成b*c的不同列联表。


2CHISQ:要求进行卡方检验(Chi-Square Test)

FISHER:要求对大于2×2的表进行Fisher的精确检验;

如果有超过1/4格子的理论数小于5SAS会打印警告。

WARNING: 25% of the cells have expected counts less than 5. Chi-Square may not be a valid test.

接着就得看Fisher确切检验结果。

总结:建立数据两种发法,对于该分类资料。如下:

方法一:

data a;

input g1 g2 x@@;

cards;

1 1 74 1 2 51

2 1 56 2 2 19

;

proc print;

run;

proc freq;

tables g1*g2/chisq fisher;

weight x;

run;

方法二:(正规标准写法,强烈推荐!!!)

data a;

do grp="不用抗凝剂  ","用抗凝剂";

do res="生存","死亡";

input f@@;

output;

end;

end;

cards;

 74 51

 56 19

;

 proc freq;

tables grp*res/chisq fisher;

weight f;

run;

十、

方差分析

1

ANOVA过程和GLM过程。前者运算速度较快,但主要运用于平衡数据,即每个组内的非缺失观测值数目应相同;后者运算速度较慢,但功能强大,既可用于平衡数据也可用于非平衡数据。

PROC ANOVA < options > ;

CLASS variables ;

MODEL dependents=effects </options> ;

MEANS effects < / options > ; MEANS grp/SNK; /*SNK法进行处理因素grp的多重比较*/

RUN;

QUIT;

 

PROC GLM  <options> ;

CLASS  variables ;

MODEL  dependents= effects </options> ;

MEANS  effects < / options > ;

RUN;

QUIT;

 

2

MEANS语句指定要进行多重比较的考查因素及比较方法

多重比较的方法有:

 BONBonferroni检验)、DUNCAN(新复极差法)、

 DUNNETTGABRIELLSD(最小显著差法)、SCHEFFESIDAK、 SNKq检验)、TUKEYWALLER

 最为常用的有:

    SNK

                DUNNETT

                HOVTEST:方差齐性检验

 

例如:

  MEANS  grp /SNK;  /*grp是要进行多重比较的因素,方法SNK*/

        MEANS grp /DUNNETT(Control);/* Control是对照的取值*/

        MEANS grp / tukey  hovtest; /* tukey多重比较,方差齐性检验*/

数据集建立方式:

方法一:

data ex61a;

input grp$ @@;

  do i=1 to 6;

    input y @@;

    output;

  end;

cards;

A 23 12 18 16 28 14

B 28 31 23 24 28 34

C 14 24 17 19 16 22

D 8  12 21 19 14 15

;

run;

方法二:

data ex61b;

 input y @@;

 grp=int((_n_-1)/6);

cards;

23 12 18 16 28 14

28 31 23 24 28 34

14 24 17 19 16 22

8  12 21 19 14 15

;

run;

方法三:

data ex61c;

    input y grp$ @@;

cards;

23 A 12 A 18 A 16 A 28 A 14 A

28 B 31 B 23 B 24 B 28 B 34 B

14 C 24 C 17 C 19 C 16 C 22 C

8  D 12 D 21 D 19 D 14 D 15 D

;

run;

十一、

完全随机设计资料的秩和检验

PROC NPAR1WAY

单组符号秩检验(配对)

PROC UNIVARIATE

随机区组设计的秩和检验

PROC FREQ

1)Options

Data=SAS-data-set:指定分析数据集名。

Wilcoxon:对数据或wilcoxon的秩次得分进行秩分析。对于两组,执行wilcoxon秩和检验;

        对于多组,执行Kruskal-Wallis H检验

2)配对秩和检验

使用做差来算d=x1-x2;

PROC UNIVARIATE data=ex3;

VAR  d;

RUN;

观察数据时看

3)区组设计秩和检验Friedman检验

 

PROC FREQ ;

  TABLE  区组*分组*结果/scores=rank CMH;

RUN;

CMH第二个统计量“Row Mean Scores Differ”即为Friedman检验

十三、

1)直线相关分析

PROC  CORR  <option(s)>;

              VAR  variables;

               PARTIAL variables;

2)直线回归分析

PROC  REG  [options];

    MODEL  dependent(因变量)=regressors(自变量) </options>;

    PRINT  stb;(STB 显示标化回归系数)

PLOT  [Y*X]  [/options];(P 计算Y的预测值)(conf:总体回归线的置信带;pred:个体值的容许区间。)

例:输出Y的预测值,进行残差分析

proc reg;

model chol=age/r p;  /*P:输出预测值;r:进行残差分析*/

run;

quit;

十四、

1SELECTION=method

  规定变量筛选的方法,method可以是以下几种选项:

  1)FORWARD(F),向前筛选法,按照SLE规定的入选显著性水平,选择偏回归平方和最大且在规定的水平上显著的自变量逐个引入方程,直到无变量引入为止。

  2)BACKWARD(或B),向后剔除法,按照SLS规定的剔除显著性水平,从含有全部变量的模型开始,依次剔除一个变量,直到无变量剔除为止。

  3)STEPWISE,逐步法,按照SLE规定的入选显著性水平,依次选入变量,同时对模型中现有的变量按SLS规定的剔除显著性水平剔除不显著的变量,直到无变量引入且无变量剔除为止。

  4)NONE,即不作任何变量筛选,此时回归模型中含有全部自变量。系统默认。

  5)此外,还有其它的选择方法,如MAXRMINRRSQUAREADJRSQCP等。

 

2INCLUDE=n

  该选项强制前面n个自变量进入回归模型,无论它们是否显著。

3SLE=

  规定变量入选模型的显著性水平,前进法的默认是0.5,逐步法是0.15

4SLS=

  规定变量保留在模型的显著水平,后退法默认为0.10,逐步法是0.15

5STB

  STB产生标准化回归系数,可用来比较各个自变量作用的大小。

6COLLIN

   要求详细分析自变量之间的共线性,给出信息矩阵的特征根和条件数,来判断自变量之间有无多重共线性。

7VIF

    输出方差膨胀因子

8R

   进行残差分析

9P

   输出Y的预测值

 

十五、

1.ODS对象特征

每个过程步可产生一个或多个ODS对象

每个ODS对象由两部分构成:

数据部份:输出的内容包括数值或字符;

模板部份:也称为表的定义,描述输出的内容在输出显示时如何布局。

2.ODS输出传送目标

ODS传送目标包括

LISTING:在OUTPUTGRAPH窗口显示

HTML:生成HTML格式文件

RTF:生成*.rtf文件

OUTPUT:生成SAS数据集

PRINTER:生成*.ps*.pcl*.pdf文件或直接打印

默认Listing是打开的,其它四个都是关闭的

3.Listing目标的结果保存到文件

Ods listing file=’文件地址’|逻辑文件名;

      所有结果将输出到指定文件

 ODS html  file = ’文件位置和名称’;

            SAS程序 ;

 ODS html close;

若在file中只指定文件名,没有给出路径,则保存到当前工作目录中

4.ODS TRACE语句

 

跟踪查询过程创建所有的ODS对象名称等信息

后续可选择特定ODS对象输出

 

语句格式

          ODS TRACE ON;            /*开启跟踪查询*/

          ODS TRACE OFF;          /*关闭跟踪查询*/

 

n Proc Means:计算定量变量的基本统计量。ODS的输出对象为Summary,包括样本量、均数、标准差、最小值、最大值、中位数、缺失数等统计量。其SAS程序如下:

Ods Output Means.Summary=Summary;

Proc Means Data=数据集名 n mean std min max median nmiss;

Class 分组变量;

Var 分析变量;

Run;

Ods Output Close;

 

补充:

[学习分享]利用SAS中的ODS导出程序结果数据集

n Proc Freq:输出频数、百分率,进行卡方检验、CMH(Cochran-Mantel-Haenszel)检验及Fisher确切概率法检验。ODS主要输 出对象有CrossTabFreqsCMHFishersExactChisq,其中CrossTabFreqs输出行列表的频数和百分率、CMH输出CMH检验的统计量和p值、FishersExact输出Fisher确切概率检验的p值、Chisq输出卡方检验的统计量和p值。其SAS程序如 下:

Ods Output CrossTabFreqs=CrossTabFreqs1 CMH=CMH Chisq=Chisq FishersExact=FishersExact;

Proc Freq Data=数据集名;

Table 分组变量*分析变量/Expected CMH Chisq Fisher;

Run;

Ods Output Close;

 

n Proc Logistic:输出Logistic回归分析的结果。其中ParameterEstimates输出参数估计及其标准误、Wald卡方值、p值,OddsRatios输出OR值及其95%标准误。其SAS程序如下:

Ods Output ParameterEstimates=ParameterEstimates OddsRatios=OddsRatios;

Proc Logistic Data=数据集名;

Class 分类变量

Model 因变量=自变量/Seletion= Sle= Sls=;

Run;

 

 

 

利用ods输出正态性检验的结果数据集

/*ods listing close;

ods output TestsForNormality=TestsForNormality;

proc univariate normal data=mnhsfps;

var weight;

class group;

where FAS=1;

run;

ods listing;

 

data normal(drop=pType pSign);

set TestsForNormality;

where Test='Shapiro-Wilk';

rename VarName=Variable;

run;*/

 

0 0