SAS学习笔记

来源:互联网 发布:php json true false 编辑:程序博客网 时间:2024/06/06 01:56

实习期间学习的简单笔记,与大家分享下!

 

分号结尾,不区分大小写,由数据步和过程步组成

1,sas的数据

数据集,类似于数据库中的表(table;

SAS数据库(library),类似于数据库中数据库与表的关系,

Libname samp  'E:\workspace\sas\samp';新建数据库

Libname samop;撤销数据库

2sas语言构成

Sas常量主要有数值型和字符型两种,还有表达时间和日期的数据类型;数值型常数可以用整数、定点实数、科学计数法实数表示,字符型常数为两边用单撇号或两边用双撇号包围的若干字符。

日期型常量:‘13JUL1988d结尾为d,大小写均可,中间无空格

时间型常量:‘142015.32t字符串后加字母t,保存为秒数

日期时间型常量:‘13JUL1988142015.32’。

变量有数值型和字符型两种基本类型,默认长度均为8个字符,可以用length直接制定变量的长度,格式为LENGTH字符型变量名 使用小数点来表示缺失数值常量,用‘’表示字符串缺失值。

Sas运算符: + - * / **两个乘号为乘方运算

比较运算符:= EQ^= NE> GT , < LT ,>= GE ,<=LE ,IN

Prov in(‘北京’,‘天津’) NOT IN不属于变量PROV 是否是变量之一;

逻辑运算符: &and  | OR ^ not

其它运算符: ||用于连接两个字符串,<> 用于取两个运算符值中较大的一个(3<>5结果为5 ><用于取两个运算值中较小的一个(3><5结果为3

注释:星号开头的行,或者/**/

数据步:以Data语句开头,以Run语句结尾

全局语句:options语句,全局语句options语句可以规定系统运行的一些选择项,如:

Options formdlim='*' nonumber nodatelinesize=64 pagesize=60;

3,输出语句

Sas数据步的输出一般是数据集,用赋值语句计算的结果会自动写入数据集。SAS也提供了一个PUT语句,在其后面列出要输出的各项,每一项可以是变量名或字符串,不能为数值常量或表达式,各项之间用空格分开。

Put语句的输出结果显示在log窗口。

PUT语句中使用“变量名=”来制定输出项可以显示带有变量名的输出结果,如:

指定列输出:put语句的输出项还可以制定具体列位置:

还可以制定域宽和精度格式:

列指针和换行:

输出改向:可以用FILE语句,改变PUT语句的输出目的地。

4,分支结构

IF THEN语句

使用DOEND的复合语句:

IF ELSE结构

IF ELSE IF ELSE 结构

 

SELECT语句,提供多重分支功能。

 

SAS的循环结构:(1)计数循环,DO计数变量=起始值 TO结束值 BY 步长;

                                       循环语句

                               END

(2)当型循环

         DO WHILE (循环继续条件)

                循环语句

          End

(3)直到型循环

                DO UNTIL(循环退出条件);

                        循环语句;

                END

5,数组

ARRAY 数组名(维数说明)数组元素名列表(初始值表);

ARRAY TEST3 math chineseenglish (0,0,0);

Array 语句中的变量列表可以用_NUMERIC_代表所有数值型变量

可以使用ordinal函数对数组进行排序 ordinal(i, of  y1-y4);

字符型数组: Arrray数组名(维数说明) $ 元素长度说明数组元素名列表(初始值表);

6SAS过程初步

过程的一般形式:

Proc 过程名 DATA=输入数据集选项;

过程语句 [/选项]

过程语句 [/选项]

。。。。。

Run

过程步一般以run语句结束,有些交互式过程以quit语句结束;其它数据步或过程步也可以结束上一个数据步或者过程步。

VAR语句,用来指定分析变量。

VAR math chinese

变量名可以使用省略的形式X1-X3 MATH--CHINESE等。

MODEL语句在一些统计建模过程中用来指定模型的形式。

一般形式为 MODEL因变量=自变量/选项;

例如:

Model math=chinese;

即用语文成绩预测数学成绩。

BY语句,在过程中一般用来指定一个或多个分组变量,根据这些分组变量值把观测分组,然后对每一组观测分别进行本过程指定的分析。

procsortdata=samp.c9501;

     by sex;

run;

 

procprintdata=samp.c9501;

     by sex;

run;

下列过程可把男、女生分别列出;

 

CLASS语句

在一些过程(ANOVA)中,使用CLASS语句制定一个或几个分类变量,在另一些过程中(MEANS)中,CLASS语句作用与BY语句类似,可以指定分类变量,把观测按分类变量分类后分别进行分析。使用CLASS时不需要先按分类变量排序。

 

OUTPUT语句

常用output语句制定输出结果存放的数据集,常用形式:

OUTPUT OUT=输出数据集名

        关键字=变量名关键字=变量名。。。。;

OUTPUT OUT=输出数据集名

        关键字=关键字=。。。/AUTONAME

FREQ语句

指定一个重复数变量,每个观测中次变量的值说明找个观测实际代表多少个完全相同的重复观测,它只取整数值:

Freq numcell

Weight语句

    指定一个权重变量,在某些允许加权的过程中代表权重,其值与观测对应的方差的倒数成正比。

ID语句

有些过程(    PRINT UNIVARLATE)需要输出观测的代号,这一般使用观测的序号,如果数据集中有一个变量可以用来区分观测,就可以用ID语句制定找个变量作为观测标志,如:

Id name

Label语句

过程步中的label语句为变量制定一个临时标签,很多过程可以使用这样的标签;格式为

LABEL 变量名=‘标签’变量名=‘标签’;

procprintdata=samp.c9501label;

id name;

var mathchinese;

label name="姓名" math="数学成绩" chinese="语文成绩";

run;

Format语句

过程步中的FORMAT语句可以为变量输出规定一个输出格式。

procprintdata=samp.c9501;

    format math5.1 chinese5.1;

run;

Sort过程

可以将数据集按照一个或若干个变量的次序进行排序。

Proc sort data=c9501;

By sex;

Run;

NODUPKEY关键字可以在按指定的BY变量排序时舍弃重复的BY变量值,只留下那些互不相同的BY变量值。

procsortdata=samp.c9501

out=c9501sex(keep=sex)nodupkey;

      by sex;

run;

按几个变量排序时,关键字DESCENDING关键字表示由大到小进行排序。可以用FIRST.变量名判断是否是分组的首个观测,LAST.变量名判断是否分组的最后一个观测。

procsortdata=samp.classout=c12;

     by sexdescending height;

run;

 

data new;

    set c12;

    if first.sex;

    by sex;

run;

procprint;run;

 

MEANSUNIVARIATE FREQ语句用来计算简单的描述统计量

MEANSUNIvariate过程对区间变量计算均值、标准差等数字特征;

FREQ过程计算取值频数分布

procmeansdata=samp.c9501;

     var math chinese;

run;

可以在means语句中指定SUM CV等统计量名,要求只输出这些统计量。CLM选项要求计算均值的置信区间,用ALPHA=指定置信度为1-a_n_是数据集的行号,_type_用来区分组的类别,如:

procmeansdata=samp.classsumcv;

var height;

_n_;

run;

 

Freq语句,将结果输出到数据集中:

procfreqdata=samp.c9501;

     tables sex /out=sext;

run;

procprint;run;

 

Corr语句 进行相关系数的计算

proccorrdata=samp.gpa;

var hsm hsshse;

run;

使用VARwith语句组合进行两组变量之间相关系数的计算

proccorrdata=samp.gpa;

var hsm hsshse;

with satmsatv;

run;

使用spearman选项进行spearman秩的计算

proccorrdata=samp.gpaspearmanout=gpaspearman;

     var satm satv;

     with gpa;

run;

 

 

7.SAS界面中的输出管理

HTML输出

设置方式:“tools-options-preferences”菜单,在弹出的对话框中找到“Results”页,选中其中的“Create HTML”。

ODS(输出提交)介绍

SAS界面中通过选项可以每次生成HTML格式的输出,这样的输出也可以复制到MS word中。支持的输出格式多,如HTMLRTFLaTexPDFpostscript等。支持把输出表格作为一个数据集保存。支持输出部分结果。支持新输出格式自定义。

输出为rtf

odsrtffile="testtods.rtf"contentstoc_data

    bodytitlestartpage=nokeepn;

odsrtfstyle=Minimal;

odsnoproctitle;

title'身高和体重数据';

procprintdata=samp.classnoobs;

run;

title'身高和体重统计';

procmeansdata=samp.class;

var heightweight;

class sex;

run;

odsrtfclose;

输出为tex

procmeansdata=samp.class;

   title'Mean Height and Weight';

   var height weight;

run;

odslatex cloase;

输出为pdf

odspdffile='sasout.pdf';

title ;

procprintdata=samp.classnoobslabel;

run;

odspdfclose;

ODS保存输出表为数据集

不同的SAS过程有不同的输出格式和输出数据集选择,在日志中将显示各输出部分的名称:MomentsBasicMeasuresTestForLocationQuantiles。使用ODS OUTPUT语句,其中用“输出名=数据集名”的方法制定输出。如:

odsoutputMoments=mom Quantiles=qu;

procunivariatedata=samp.class;

    var height;

run;

odsoutputclose;

数据集转置TRANSPOSE语句

data mat;

    input x1-x3;

    cards;

1 2 3

4 5 6

7 8 9

10 11 12

;

run;

 

proctransposedata=matout=matt;

var x1 x2 x3;

run;

数据集合并的典型事例

 

/*data db;

     set samp.onecol;where test='b';

     b=val;keep num b;

run;

 

data da;

     set samp.onecol;where test='a';

     a=val;keep num a;

run;*/

data a(drop=test);

    set samp.onecol(where=(test='a')rename=(val=a));

run;

data b(drop=test);

    set samp.onecol(where=(test='b')rename=(val=b));

run;

 

title'筛选后数据onecol';

procprint;run;

procprintdata=b;run;

 

procsortdata=a;by num;

procsortdata=b;by num;

data twocol;

    merge a b;by num;

run;

procprint;run;

title'合并行:PROC SQL';

procsql;

    createtable twocas

         select a.numasnum,a.valas a, b.valas b

         from samp.onecol a, samp.onecol b

         where a.num=b.numand a.test='a'and b.test='b';

quit;

在数据步中用多次OUTPUT可以把一个观测拆分为多个观测:

title'拆分观测';

data new1;

    attrib numlength=8 testlength=$1;

    set twoc;

    test='a';output;

    test='b';output;

run;

procprint;run;

8.标题和全局语句

使用中文列题:为了给列标题使用中文可以在过程内用Label语句给变量制定标签,同时在ProcPrint语句中加Label选项。

如果已经在生成数据集的数据步中用LABEL语句或ARRRIB语句为变量制订了标签则不必重复定义标签。

procprintdata=samp.c9501;

var name sexchinese math avg;

label name='姓名' sex='姓名' chinese='语文' math='数学' avg='平均值';

run;

同时可以使用SPLIT=选项制定标签中的一个字符为换行字符,使得比较长的标签在制定的位置拆分为两行或者多行。、

使用FORMAT制定输出格式。

 

procprintdata=samp.c9501;

var name sexmath chinese;

format math7.1 chinese8.5;

run;

使用title来制定标题内容

title'95级一班成绩表';

procprintdata=samp.c9501;

var name sexchinese math avg;

label name='姓名' sex='姓名' chinese='语文' math='数学' avg='平均值';

run;

同时title也是一个全局语句

取消标题没有内容的空的TITLE语句:

Title;

使用全局语句FOOTNOTE可以为输出教脚注;

Footnote'第三章例子输出'

同时print语句可以使用sum计算总和:

data bkmoney;

footnote'第三章例子输出';

input name $amount;

cards;

李明 20

张弘毅 30

张四场 40

张文 50

张武 60

;

run;

title;

procprintdata=bkmoneynoobs;

    sum amount;

run;

显示观测个数,在PROC PRINT语句中加入N='总人数:',也可以使用BY进行分组显示,需要制定如N='小组人数:'‘总人数:’,这样在每个组显示‘小组人数:xx’,在表最后显示‘总人数:xx’。如:

title"人数统计";

procprintdata=c9501bkn="小组人数:""总人数:";

    by sex;

    id sex;

    sum amount;

run;

汇总表格

TABULATE过程与汇总表格

Print过程列出观测,TABULATE可以作出很复杂的表,其一般格式为:

 PROC TABULATE DATA=数据集名;

  CLASS 分类变量;

  VAR分析变量;

  TABLE 页微说明,行维说明,列维说明/选项;

Run;

proctabulatedata=c9501bk;

class sex;

var mathchinese;

table sex,(mathchinese)*(mean std);

run;

使用KEYLABEL语句指定各统计量的标签,其格式为:

KEYLABEL关键字='标签'

proctabulatedata=c9501bk;

    class sex;

    var math chinese;

    table (sex all),(math chinese)*(mean std);

    keylabel mean="平均值" std="标准差" all='总计';

    label sex='性别' math='数学' chinese='语文';

    run;

或者进行直接指定:

proctabulatedata=c9501bk

     class sex;

      var mathchinese;

      table(sex='性别' all='总计')*(sex='性别' math='数学' chinese='语文');

run;

footnote'标签命名';

Tabulate也可以用“*F=”指定输出格式。例如:

proctabulatedata=samp.c9501;

     class sex;

      var mathchinese;

      table(sex='性别' all='总计')*(sex='性别' math='数学'*F=5.1 chinese='语文'*F=6.2);

run;

 

9.SAS/Graph绘图

使用GLOT过程绘制散点图和曲线图

 

 

0 0