sas整理.docx

上传人:b****7 文档编号:10640000 上传时间:2023-02-22 格式:DOCX 页数:62 大小:35.42KB
下载 相关 举报
sas整理.docx_第1页
第1页 / 共62页
sas整理.docx_第2页
第2页 / 共62页
sas整理.docx_第3页
第3页 / 共62页
sas整理.docx_第4页
第4页 / 共62页
sas整理.docx_第5页
第5页 / 共62页
点击查看更多>>
下载资源
资源描述

sas整理.docx

《sas整理.docx》由会员分享,可在线阅读,更多相关《sas整理.docx(62页珍藏版)》请在冰豆网上搜索。

sas整理.docx

sas整理

数据处理

第一部分:

一数据处理的定义:

数据处理时在对数据应有的理解后,利用各种工具软件对数据进行加工、整理、分析,应用的过程。

二数据类型

1横截面数据集(cross-sectionaldataset):

即给定试点对个人、家庭、企业、国家或一些列其他单位采集的样本所构成的数据集(应该忽略细小的时间差别)

2时间序列数据集(timeseriesdataset):

是由一个或几个变量在不同时间的观测值所构成的。

3混合横截面数据集(pooledcrosssectiondataset):

有些数据既有横截面数据的特点又有时间序列的特点,但每一时点的样本不同。

4综列数据集(paneldataset):

有横截面数据集中每个样本的一个时间序列组成。

(定期长期调查)

三书写格式

1sas程序由语句构成,语句用分号结束;

2sas语句可以从某一行的任意位置开始;

3几个sas语句可以写在同一行上,但每句要使用分号;

4一个语句也可以写成几行,主要语句中的单词不被断开就可以。

在一个语句中各个单词之间至少要有一个空格。

5sas程序中一般不区分大小写;

6用/*注释的内容*/来对程序进行注释。

四格式

1变量:

名称、类型、长度、输入格式、输出格式、标签

2输入格式:

数据被sas读取的格式

3输出格式:

数据呈献给人们的格式

第二部分:

程序及解析

例1hellowword

dataa;/*建立一个数据集*/

fileprint;/*在日志窗口中输出*/

put'helloworld';/*输出helloworld*/

run;

procprint;

run;

结果

HelloWorld

例2orange

dataoranges;生成数据集

inputvariety$flavortexturelooks;其中variety为字符型变量,其他均为数值型

/*total=flavor+texture+looks;*/

total=flavor+texture+looks;

labeltotal="总数";

cards;样本,在输入时,下方将会变位黄色。

navel986

temple777

valencia899

mandarin578

;

procsortdata=oranges;

bydescendingtotal;

run;

procprintdata=oranges;

/*var_numeric_;*/

var_character_;

title'对ORANGES数据集的品尝检验结果';

run;

例3libname

*libnamezhaoclear;删除数据集zhao

*libname_all_clear;删除所有变量

*libnamezhao('e:

\data\''e:

\');

*libnamezhao2v6'e:

\sas';v6为启动的版本

libnamezhao'e:

\sas';建立永久数据集,引号中的路径应该存在。

datazhao.aa;

inputa;结果(并且会在D盘中生成相关的sas文件)

cards;

1

;

run;

(一)建立sas数据集的5种方法

1、data步自己输入数据建立。

Orange例

2、data步利用set语句建立。

Set例

例4set:

将sas中已经有的数据集复制到新的数据集中

dataabc;

setsasuser.business;

run;

procprint;

run;

例5set2

dataa;生成数据集a

inputidming$sex$@@;3个变量id,ming,sex其中后两个是文本型

cards;

1MARYF3ANNF4TOMM;

datab;

inputidname$sex$@@;

cards;

2JOSEF5ERIEM6MAYF1MARYM;

dataresult;

seta(rename=(ming=name))b(in=inb);调用上述两个已经生成的数据集。

In选项产生变量负责记录观测来自该数据集。

*byid;

ifinb=1thenbonus=100;

run;

procprint;

title'串接数据集';

run;

3、从外部调入。

Infile例

例6infile(从外部调入数据)

dataabcd;

infile'e:

\sas\data\xxxx.dat';要保证相应路径下有xxxx.dat文件存在

inputabc;

run;

procprint;

run;

4、利用“导入数据”功能建立。

Id.xls例、data.txt例

例7Id与data

方法为文件—导入数据—选择相应的文件名。

5、利用EFI(externalfileinterface)功能导入。

Column.dat例、tests.dat例、comma.dat例

操作方法与上例类似,在导入数据时选择EFI即可。

(二)SAS运算符

1算术运算符:

+(加)-(减)*(乘)/(除)**(乘方)

2比较算符:

=(EQ)equal^=(NE)not-equal>(GT)great<(LT)least>=(GE)greatequal<=(LE)leastequalin(在某一范围内例如:

ain{a,b,c,d})

3逻辑算符:

&(AND)|(!

)(OR)^(~)(Not)

4其它:

><(最小值)<>(最大值)

例8operator

dataoranges;

inputvariety$flavortexturelooks;输入变量

total=flavor+texture+looks;

ifvarietyin('navel','valencia')如果变量属于这两种,那么total乘以10

thentotal=total*10;

if(flavor

thentotal=total*100;

a=flavor<>texture**2;/*在多个一级运算符存在的情况下从右边开始计算*/

b=variety||'.var';

labeltotal="总数";

cards;

navel986

temple777

Valencia899

mandarin578

;

procsortdata=oranges;

bydescendingtotal;按total值降序排列

run;

procprintdata=oranges;

/*var_numeric_;*/

/*var_character_;*/

title'对ORANGES数据集的品尝检验结果';

run;

字符的比较

1、按机器使用的字符排列次序(ASCⅡ或Unicode)从左到右被比较;

2、两个不等长的字符串被比较时,系统在较短的字符串后自动添上空格;

3、在比较符后加冒号,则只比较首字母;

4、如果字符串前面有空格则需要考虑,后面有空格就不需要考虑。

例9operator_char

data;

input(abc)($);输入文本型的变量

ifa>bthenresult1='true';比较a和b,若a>b则result1='true'

elseresult1='false';

result2='Fox'<>'Fox';/*result2变量的长度

由最长的字符串决定*/

result3='Fox'<>'Foxs';

ifa>:

'S'thenresult4="GreatthanS";

cards;

GRAYADAMSG

TOMTOMAT

SamRobeS

saSAgs

{|a

ЩШb

↓↑c

;

run;

procprint;

run;

运算次序:

在括弧里的表达式先计算

第一级:

**(+-)前缀^><<>

第二级:

*/

第三级:

+-

第四级:

||

第五级:

其余比较算符

第六级:

第七级:

对于相同优先级的算符,左边的运算先做。

但有两个例外:

1.对最高优先级,右边的运算先做

2.当两个比较算符围着一个量时,这个表达式看成是有一个and出现一样被计算。

如:

12<age<20,

等价于:

12<age&age<20

例10ranuni:

生成100个0到1之间的随机数。

data;

fileprint;

don=1to100;

x=ranuni(0);

putx;

end;

run;

procprint;

run;

例11functions

databbb;

inputx1-x5x6$dateyymmdd15.;

/*formatdateyymmdd10.;*/

*formatdateweekdate12.;

x7='o';

x8='Iamastudent';

/*以下是数学函数*/

a1=max(x1,x2);/*最大值*/

a2=sum(x1,x2);/*最小值*/

a3=sign(x3);/*取符号正1负-1*/

a4=sqrt(x5);/*开平方*/

a5=mean(x1,x2);/*取平均值*/

/*以下是截取函数*/

b1=floor(a5);/*向下取整*/

b2=ceil(a5);/*向上取整*/

b3=int(a5);/*去掉小数*/

/*以下是字符函数*/

c1=index(x6,x7);/*取x6中x7的位置*/

c2=substr(x6,3,3);/*x6中从第三位开始截取3位*/

c3=scan(x8,2);/*x8中的第二个字母*/

c4=upcase(x8);/*换成大写*/

c5=compress(x6,x7);/*去除x6中x7位置的字母*/

/*以下是时间函数*/

d1=weekday(date);/*返回星期几*/

d2=year(date);/*返回年份*/

d3=qtr(date);/*返回季度*/

d4=day(date);/*返回日期*/

/*以下是概率函数*/

e1=probnorm(0);/*生成正态分布数*/

e2=n(ofx1-x5);/*非缺失值个数*/

e3=nmiss(ofx1-x5);/*缺失值个数*/

e4=var(x1,x2);/*方差*/

e5=std(x1,x2);/*标准差*/

/*以下是随机数函数*/

f1=ranuni

(1);/*随机生成相关的数*/

cards;

run;

procprint;

run;

(三)DATA步

DATA语句标志了数据步开始,并指定了数据步结束时要生成的数据集名字。

每次读入一行数据,读入后执行数据步中的其它语句,循环数据步读取整个数据。

_N_变量表示DATA步已经执行的次数

_error_变量值为1时表示程序出错

例12flow

dataflow;

/*putx=y=z=_n_;*/

inputxy;

z=x+y;

putx=y=z=;在日志窗口中查找结果。

put_n_=_error_=;

cards;

1020

100200

10002000

;

run;

例13flow1

dataflow1;

putx=y=z=;

setflow;调入已经生成的flow数据集

putx=y=z=;

run;

procprint;

run;

例14flow2

dataflow2;

inputweightwaistjumpssitupspulse;

setflow;

ratio=x/jumps;

dropjumps;在结果中不列出变量jumps

cards;

13345

;

run;

procprint;

run;

例15data

datanew1(drop=z);不列出变量z

setflow;

run;

datanew2(keep=x);保留变量x

setflow;

run;

datanew3(label='thenew3dataset');加标签

setflow;

run;

datanew4(rename=(x=xxy=yy));更改名称

setflow;

run;

procprintdata=new1;

run;

procprintdata=new2;

run;

例16data2

data_data_;

setflow;

run;

data_null_;产生临时数据集,只供put语句等读取结果。

setflow;

u=x+y+z;

putu;

run;

/*data_last_;

setflow;

t=x+y;以最新产生的数据集命名并取代其内容。

run;*/

procprint;

run;

例16input@

data;

inputtype$@;在同一行输入文本

iftype='c'theninputcourse$prof$;

elseiftype='s'theninputname$id3.2;

cards;

cmathzxs

szhao58888

;

procprint;

run;

例17input@@

data;

inputx@@;

cards;

1234

;

run;

procprint;

run;

例18input1

data;

input@1x5.2@6y2.1+2z#2xx;

cards;

12345678912345

234

;

procprint;

run;

例19input2(选学)

datatopics9;

infiledatalinesdsd;

inputspeaker:

$15.title~$40.location&$10.;

datalines;

Whitfield,'LookingatLift',BlueRoom

Puentes,"LifeAftertheRevolution",RedRoom

Townsend,"PeaceinOurTimes",GreenRoom

;

procprint;

run;

例20cards(选学)

data;

inputnumbercitation$50.;

cards4;

1Berry

2LINETAL.,1995;BRADY,1993

3BERG,1990;ROA,1994;WILLIAMS,1992

;;;;

run;

procprint;

run;

例21put

data;在日志窗口中显示1230个“SAS学习”字样。

/*fileprint;*//*changetheoutputwindow*/

put1230*'SAS学习';

run;

procprint;

run;

例22put1

dataput;输出最新的数据行到sas日志窗口

inputxy;

z=x+y;

put_infile_;/*put_all_;*/

put_n_=;

cards;

1020

100200

10002000

;

run;

例23by

databy;

inputstate$city$monthx;

cards;

nca13.02

nca22.1

nca34.03

ncb15.03

ncb26.3

ncb37.3

vac18.1

vac28.2

vac39.3

vad110.8

vad211.1

vad331.2

;

run;

databy1;

setby;调用上述数据集

bystate;按照state分类。

fileprint;

ifx=8.1thenput_all_;

run;

/*databy2;

setby;

bystatecitymonth;

fileprint;

ifx=8.1thenput_all_;

run;

例24output1

datayear81year82year83;

inputyearx1-x2;

ifyear=1981thenoutputyear81;

elseifyear=1982thenoutputyear82;

elseifyear=1983thenoutputyear83;

cards;

198112

198223

198334

;

run;

procprint;

run;

quit;

例25output2

datarepeat;

infilecards;

inputsubject$meal1-meal3;

dropmeal1-meal3;

mea=meal1;output;/*把meal1的值赋给mea*/

mea=meal2;output;

mea=meal3;output;

cards;

a254

b362

;

procprint;

run;

例26output3

datapay;

inputareaamount;

cards;

111100

11125

333160

33380

777142.66

;

procsortdata=pay;

byarea;

datasubtotal;

setpay;

byarea;

iffirst.areathentotal=0;by组的第一个观测

total+amount;

dropamount;

iflast.areathenoutput;by组的最后一个观测

run;

procprint;

run;

例27point

datazxs;创建数据集

don=2tototal;循环

setsasuser.flowpoint=nnobs=total;调用数据

/*if_error_=1thenabort;*/

output;

end;

stop;

run;

PROCPRINTdata=zxs;

RUN;

例28merge

dataperson;

inputname$sex$;

cards;

MARYF

ANNF

TOMM

;

dataplace;

inputname$city$region;

cards;

MARYMIAMI2

ANNTAMPA6

JOSEERIE5

MARYTAMPA7

;

/*procsortdata=person;

byname;

procsortdata=place;

byname;*/

dataresult;

mergepersonplace;并接这两个数据集

*byname;

procprint;

title'DATASETRESULT';

run;

如果去掉byname前的星号,结果如右图所示:

例29update:

用一个升级数据集中的观测来修改一个主数据集。

一定要和by语句一起使用。

dataa;

inputidname$sex$;

cards;

1zxsm

2zjym

3zmf

;

datab;

inputidname$sex$sales;

cards;

1zxsf34

;

datac;

updateab;

byid;

run;

procprint;

run;

1.Delimiter(DLM)选项:

规定一个字符替代空格作为分隔符。

2.Firstobs选项:

不是从文件的第一个记录开始,而是从指定行开始读取记录

3.Obs选项:

规定用户想从输入文件中连续读取的最后一个记录号

例30infile(dlm)

datanew1;

infilecardsdelimiter=',';将,作为分隔符

inputxyz;

cards;

1,2,3

4,5,6

;

datanew2;

infilecardsdlm='ab';ab字母的任何组合均为分隔符。

inputxyz;

cards;

1aa2ab3

4bb5ba6

7a8b9

;

run;

procprintdata=new1;

run;

procprintdata=new2;

run;

DSD选项:

1、使最外层引号括起的内容当成整个字符串输入,并去除最外层引号

2、默认分隔符为逗号

3、两个相邻的分隔符意味着前一个分隔符后的字段为缺失值

例31infile(obs)

dataabc;

infile'e:

\SAS\column.dat'firstobs=2obs=3;

inputa$9.;输出格式为9位数

run;

procprint;

run;

当行末尾数据宽度少于规定宽度时

Flowover:

默认选项,将下一条记录读入

Missover:

将变量置为缺失

Truncover:

将数据直接读入,不管宽度是否少于规定宽度

Stopover:

系统终止数据步执行,报告出错

Lrecl=n选项:

设定源数据文件行的物理长度,缺省为256,最大可设为32767

Pad|Nopad选项:

pad选项指当宽度少于规定宽度时,在后面填充空格至Lrecl=n规定的行长度,缺省为nopad

例32missover

data;

infile'e:

\sas\missover.dat'pad;/*flowovermissovertruncoverstopoverpad*/

inputx5.;

run;

procprint;

run;

例33delete

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1