02数据集的建立与编辑.docx
《02数据集的建立与编辑.docx》由会员分享,可在线阅读,更多相关《02数据集的建立与编辑.docx(12页珍藏版)》请在冰豆网上搜索。
02数据集的建立与编辑
第二章数据集的建立与编辑
建立SAS数据集是应用SAS分析的基础。
2.1SAS数据集的建立
2.1.1SAS数据集的结构、SAS数据库及数据库命名
1.SAS数据集的结构
描述部分——用INPUT语句实现
数据部分——用CARDS语句实现
2.SAS数据库和库标记
1SAS数据库:
存储SAS数据集等SAS文件的物理地址,俗称地址或路径。
2SAS数据库的命名
临时数据库:
默认的SAS数据库名‘c:
\sas\saswork’,其库标记(逻辑名)为work。
当退出SAS系统,临时敉据库却自动被删除.
永久数据库:
由用户自建SAS数据库名,在DOS状态用MD命令建立,如’c:
\sas\text’;其库标记用LIBNAME语句建立.
如Libnameaa‘c:
\sas\text’;。
3SAS数据集命名
临时数据集名[Work.]文件名如data1,work.data2
永久数据集名库标记.文件名如aa.data1
2.1.2用DATA步创建SAS数据集
1.在PGM窗口创建SAS数据集
如例1.1(贝图1.1)
2.调用ASCⅡ码文件(即文本文件)创建SAS数据集
如:
例2.1
DATACHILD;建立名为CHILD的SAS数据集
INFILE‘C:
\BOOK\CHILD.DAT’;从指定文件中读取数据
INPUTIDX1$X2X3X4X5;指定SAS数据集的变量名、类型及读取数值顺序
RUN;结束SAS程序****
3.从已建立的SAS数据集中产生新的数据集
例如要将child中的男孩的资料组成新的SAS数据集,SAS程序如下。
DATAMALES;建立名为MALES的SAS数据集
SETCHILD;从CHILD中读取数据
IFX1=’M’THENOUTPUT;如果X1的值为M则将该记录输出到MALES中;
这里用“IFX1=’F’THENDELETE;”有同样的效果
RUN;结束SAS程序
要从child中分别产生男孩和女孩的资料组成的两个SAS数据集,SAS程序为:
DATAMALESFEMALES;
SETCHILD;
IFX1=’M’THENOUTPUTMALES;
ELSEOUTPUTFEMALES;
RUN;****
2.1.3将dBASE类数据库文件转换为SAS数据集
1.DBF过程
格式:
PROCDBFDB4=filenameout=dataname;
例2.2将C盘VFP目录中的EMPLOYEE.DBF文件转为SAS数据集,SAS过程为
FILENAMEJI‘C:
\VFP\EMPLOYEE.DBF’;指定数据库文件的逻辑名
PROCDBFDB4=JIOUT=ABC;用DBF建立SAS数据集ABC
RUN;*****
注意:
Foxpro的数据库用COPYTO文件名TYPEFOXPLUS命令产生dbf文件
2.在SAS窗口中的FILE菜单中选择IMPORT项。
2.1.4永久型SAS数据集的建立及其调用
1.意义:
将数据永久地存放在指定的目录下,供日后调用
2.永久型数据集的建立
例2.3将上节建立的临时SAS数据集ABC转为永久型数据集存放在C盘的SAS目录中。
LIBNAMEAA‘C:
\SAS’;定义C盘SAS目录的逻辑名为AA
DATAAA.ABC;在上述目录中建立名为ABC的永久型数据集
SETABC;该数据集中的数据来自当前的临时数据集ABC
RUN;
运行上面的程序即可在SAS目录下建立名为ABC.SD2的永久型SAS数据集。
3.永久型数据集的调用
例2.4将当前目录中名为AA.SD2的永久型数据集的内容打印出来。
SAS程序为:
LIBNAMECHEN‘‘;用逻辑名CHEN来代替当前目录
PROCPRINTDATA=CHEN.AA;用两级文件名来指定要打印的文件
RUN;
例2.5从AA.SD2中读取数据,在A盘中建立另一个永久型数据集STUDENT.SD2。
SAS程序为:
LIBNAMESA‘‘;用逻辑名SA来代替当前目录
LIBNAMESB‘A:
\’;用逻辑名SB代替A盘根目录
DATASB.STUDENT;用两级文件名SB.STUDENT来指定在A盘建立永久型数据集STUDENT
SETSA.AA;指明数据来源为当前目录中的AA文件
RUN;
2.2DATA步
2.2.1DATA语句
1.DATA语句的功能表示DATA步的开始,并给出创建的数椐集名
2.DATA语句的格式
DATA[SASdataset][(options)];这里的中括号表示可选项(下同)
例2.6假设有一个包含21个变量的数据集,变量名为YEAR和X1-X20,在当前目录下有一文件名为AAA的纯文本文件包含了这些变量的具体测量值,通过下面的过程可以形成含有不同变量的多个SAS数据集。
DATAYEAR82(KEEP=YEARX1-X5)YEAR83(KEEP=YEARX6-X20)
YEAR84(DROP=X13);
INFILE‘AAA’;
INPUTYEARX1-X20;
RUN;
2.2.2INPUT语句
1.INPUT语句的功能
2.INPUT语句的一般格式
INPUT[Specification];
·Specifition有四种方式,并且四种方式可以结合使用,常用的两种方式为:
(1)列表输入方式(自由格式输入)
(2)格式:
INPUTVariable[$][&]……;
例:
DATAONE;
ATTRIBNAMELENGTH=$12;规定变量NAME存放12个字符
INPUTNAME$&AGE;规定变量NAME存放带有空格的字符
CARDS;
LiHua20
SunLi-ning25
;
(2)格式输入方式
格式:
INPUTVariable[formatmodifier]informat;
特点:
格式输入给出相应变量的输入格式,用以说明数据类型及字段长度。
例如:
DATAONE;
INPUTNAME&$10SEX$WEIGHT4.2;规定变量WEIGHT的数值长度带小敉点共四位,小数点后最多二位.
CARDS;
LiLiF159
WangDaZhiM35.1
;
(3)行保持符(续行符)
格式:
在INPUT语句结束前输入@@
特点:
数据行可有多个记录的数据项
例:
DATA;
INPUTNUMBER$AGE@@;
CARDS;
110112120112210515321710数据列表中有四个记录。
;
2.3SAS数据集的整理和浏览
为使原始数据满足统计分析要求,需对数据作预处理,通过对SAS数据集的整理来实现(即通过使用相应SAS语句耒实现)..查看整理后的数据集要用FSVIEW过程。
2.3.1赋值语句
赋值用于计算一个SAS表达式,并将表达式的值赋给变量。
格式:
变量=SAS表达式;
例:
X=a+b
A=a+b
T=sum(ofX1-X5)
注意:
若表达式中含有缺失值,则结果可能为缺失值。
2.3.2累加语句
格式:
累加变量+SAS表达式
例:
A+(-B)
n+1
2.3.3DROP语句(删除变量语句)
格式:
DROP变量名表;
例:
DATAPARTS;
INPUTNAME$PARTAPARTBX1-X5;数据列表对应的变量
TEST=PARTA+PARTB;TEST为新的变量
DROPPARTAPARTB;PARTS数据集中将不包括PARTA和PARTB
CARDS;
…………(数据列表)
;
2.3.4KEEP语句(保留变量语句)
一般当要删除的变量较少时用DROP语句,要保留的变量较少时则用KEEP语句。
格式:
KEEP变量名表;
例:
DATAAVERAGE;
INPUTNAME$SCORE1-SCORE20;数据列表对应的变量
AVG=MEAN(OFSCORE1-SCORE20);新变量AVG为平均分
KEEPNAMEAVG;AVERAGE中只有NAME和AVG两个变量
CARDS;
………(数据列表)
;
注意:
KEEP语句和DROP语句只能在DATA步中使用,在PROC步中保留或删除变量必须使用数据选择项KEEP=、DROP=。
2.3.5IF语句(条件语句)
意义
格式1:
IFexpressionTHENstatement;
格式2:
IFexpressionTHENstatement1;
ELSEstatement2;
例:
IFX=3THENY=X;
IFXTHENY=X;
IFXTHENDELETE;
IFSTATUS=’OK’ANDTYPE=3THENCOUNT+1;
IFX=0THEN
IFYNE0THENPUT‘XZERO,YNOZERO’;
ELSEPUT‘XZERO,YZERO’;
ELSEPUT‘XNOZERO’;
IFANS=9THENDO;
ANS=.;
PUT‘INVALIDANSWERFOR‘ID=;
END;
ELSEDO;
ANS=ANS1;
VALID+1;
END;
2.3.6DO-END(循环语句)
意义:
格式1:
DO;
DO组;
END:
例:
IFX>5THENDO;
Y=X*10;
PUTX=Y=;
END;
Z=X+3;
条件语句规定仅当x>5时DO组才被执行,其余情况下DO组将被跳过而执行后面的赋值语句z=x+3;。
格式2:
DO循环变量=初值[TO终值BY循环增量];
[一组SAS语句];
end;
例:
DOCOUNT=2,3,5,7,11,13,17DO组对COUNT规定的每个值执行,共七次
DOMONTH=’JAN’,’FAB’,’MAR’;DO组执行三次
DOI=1TO10;DO组执行10次
DOI=1TOEXIT;EXIT事先已赋值
2.3.7其他SAS语句
1.DELETE语句(删除语句)
IFsex=’m’thendelete;
2.OUTPUT语句(输出到数据集语句)
DATAMALESFEMALES;
SETONE;
IFSEX=’M’THENOUTPUTMALES;
ELSEOUTPUTFEMALES;
RUN;
上面的程序将one数据集中的记录按性别分组重新组织新的数据集。
3.COMMENT语句(注释语句)
例:
*exp1_1;
\*Theprogramisexp1_1*\;
2.3.8SAS数据集的浏览
使用FSVIEW过程。
格式:
PROCFSVIEWDATA=DATASET;
RUN;
例:
LIBNAMELI‘C:
\SAS\TEXT’;
PROCFSVIEWDATA=LI.AAA;
RUN;
2.4SAS数据集的排序、连接与合并
2.4.1SAS数据集的排序
意义
SORT过程格式:
PROCSORTOPTIONS;
BY[DESCENDING]VARIABLE…;
RUN;
例:
PROCSORTDATA=TOTAVGOUT=S4;指明排序数据集与输出数据集
BYDESCENDINGTOTALSEX;排序规则为按TOTAL降序和SEX升序
PROCPRINT;显示排序后的数据集内容
RUN;
例子inc‘a:
exp2_4’
2.4.2数据集的连接
意义:
格式
DATANEWDATASET;
SET[SASDATASET[(DSOPTIONS)]……];
[BY[DESCENDING]VARIABLE……[NOTSORTED]];
RUN;
(1)变量相同
例2.7:
DATAHAVG;
SETMAVGFAVG;
RUN;
两数据集直接竖向对接例
(2)变量不同:
例2.8
DATASCORE1;DATASCORE2;
INPUTNAME$SEX$MATHPHYENGCHE;INPUTNAME$SEX$MATHPHY;
CARDS;CARDS;
CHENF80859065ZHANGM7889
LIM75896075WANGF9587
LINM81836780;
;RUN;
RUN;
DATASS;
SETSCORE1SCORE2;
PROCPRINT;
RUN;
运行结果如下:
OBSNAMESEXMATHPHYENGCHE
1CHENF80859065
2LIM75896075
3LINM81836780
4ZHANGM7889..
5WANGF9587..
(3)按某变量值大小有序排列的连接
PROCSORTDATA=SCORE1OUT=S1;
BYPHY;
PROCSORTDATA=SCORE2OUT=S2;
BYPHY;
DATASSS;
SETS1S2;
BYPHY;
PROCPRINT;
RUN;
运行结果为:
OBSNAMESEXMATHPHYENGCHE
1LINM81836780
2CHENF80859065
3WANGF9587..
4LIM75896075
5ZHANGM7889..
2.4.3数据集的合并
1.一对一合并(无BY语句合并)
两个数据集横向一对一合并,用MERGE语句但不用BY语句.合并后的观测数为两数据集中的最大观测数,而相同变量的取值为MERGE语句中一个数据集的观测值.
例2.10:
DATANUM;
INPUTNUM@@;
CARDS;
9500195003950049500295005
;
DATAME;
MERGENUMSSS;
PROCPRINT;
RUN;
运行结果为:
OBSNUMNAMESEXMATHPHYENGCHE
195001LINM81836780
295003CHENF80859065
395004WANGF9587..
495002LIM75896075
595005ZHANGM7889..
3.匹配合并(带有BY语句合并)
例2.11:
DATAPERSON;DATALANGUAGE;
INPUTNUMBERNAME$SEX$AGE;INPUTNUMBERLANGUAGE$SCORE;
CARDS;CARDS;
10001ZHANGF2010001ENGLISH90
10003LIM2210002JAPANESE85
10002WANGM201001RUSRIAN79
10001LINF21;
;PROCSORT;
PROCSORT;BYNUMBER;
BYNUMBER;RUN;
RUN;
DATARESULT;
MERGEPERSONLANGUAGE;
BYNUMBER;
PROCPRINTDATA=RESULT;
RUN;
运行结果为:
OBSNUMBERNAMESEXAGELANGUAGESCORE
11001.RUSRIAN79
210001ZHANGF20ENGLISH90
310001LINF21ENGLISH90
410002WANGM20JAPANESE85
510003LIM22.
INC‘A:
EXP2_11’
2.5常用的SAS运算符和SAS函数