sas整理.docx
- 文档编号:4403635
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:62
- 大小:35.42KB
sas整理.docx
《sas整理.docx》由会员分享,可在线阅读,更多相关《sas整理.docx(62页珍藏版)》请在冰点文库上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- sas 整理
![提示](https://static.bingdoc.com/images/bang_tan.gif)