实验三 SAS基本内容Word文件下载.docx
- 文档编号:18717347
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:19
- 大小:44.97KB
实验三 SAS基本内容Word文件下载.docx
《实验三 SAS基本内容Word文件下载.docx》由会员分享,可在线阅读,更多相关《实验三 SAS基本内容Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。
DATAname;
/*要建立的数据集名称*/
INPUTvariables;
/*指明数据集变量名称,为不超过8字符的字符串*/
CARDS;
/*此句后面将读入数据*/
Datalines;
/*数据行,两个数据间用至少一个空格隔开;
用格式化输入,则数据要按指定格式输入*/
;
/*表数据输入结束*/
RUN;
/*程序运行*/
⑴自由输入建立SAS数据集
INPUT变量名<
$>
;
在INPUT后面依次列出变量名称,变量间至少一个空格,<
>
为可选项,变量名后输入$——代表字符型变量,如果数据中每行有多余一组观测值,可在INPUTvariables后加@@,表示指针不换行读入各组观测值.
例如:
INPUTIDNAME$VAR1VAR2VAR3VAR4;
/*输入6个变量,序号变量ID、字符型变量NAME及数值变量VAR1、VAR2、VAR3、VAR4*/
INPUTIDNAME$VAR1-VAR4;
/*6个变量名,NAME字符型*/
⑵格式化输入建立数据集
方式一列输入:
开始列<
-结束列>
通过指定变量取值所占列数输入相应值.
在每个变量名后,空一格指出变量值占据的列数.
INPUTID1-2NAME$4-20VAR122-24VAR226-30;
/*4个变量名,将1、2列的数值赋予变量ID,第4到20列字符赋予字符型变量NAME,22到24列数值赋予VAR1*/
方式二格式化输入W.d格式:
修饰符>
输入格式W.d;
W——变量取值所占总列数,d——表示从右到左小数部分列数.此这种方式尤其适合于各变量间取值无空格、和无小数点的数据集.
例如 INPUTID2.NAME$10.VAR15.2;
/*前2列赋予ID,第3列开始10列内容赋予非数值变量NAME,接下来5列赋予VAR1,最后两位为小数部分.*/
如果变量ID与NAME的值之间有三个空格,在读完ID的值后,指针从第3列跳到第6列开始读入NAME的值,应在ID2.后空一格写上@6(移到第6列)或+3(跳过3行),另外,数据间的空格也可并到变量值的位数中.
如果有连续几个变量的W.d格式相同,可用下列简写形式:
INPUT(variables)(W.d);
如INPUT(XYZ)(2.1);
INPUT(X1-X10)(2.)等.
例8.1.1设有数据集如下:
LIMING2356170
LIUHUA2560174
ZHANGWEI3065165
相应变量分别为NAME,AGE,WEIGHT和HEIGHT,输入数据以建立一个名为examp8_1_1的SAS数据集.
方法一:
自由格式输入数据以建立数据集,完整的SAS程序:
dataexamp8_1_1;
/*建立数据集examp8_1_1*/
inputname$ageweightheight;
/*输入变量*/
cards;
/*以下为数据行*/
LIMING235617/*数据和变量名对应,数据间用空格表示*/
LIUHUA2560174
ZHANGWEI3065165
/*数据行结束*/
run;
/*运行程序*/
procprintdata=examp8_1_1;
/*打印输出数据集*/
方法二:
格式化输入:
若上述程序中数据行的形式保持不变,数据之间空一格,只要INPUT语句修改即可
inputname$1-8age10-11weight13-14height16-18;
/*或inputname$8.+1age2.+1weight2.+1height3.;
*/
/*或inputname$8.@10age2.@13weight2.@16height3.;
/*或inputname$9.age3.weight3.height3.;
方法三:
如将NAME取值中的姓和名用一空格分开,且HEIGHT的值表成具有两位小数的形式,如下
inputname$9.+1age2.+1weight2.+1height3.2;
/*或inputname$9.@11age2.@14weight2.@17height3.2;
*/
/*name$9.说明NAME占9位,正好姓名之间有空格*/
LIMING2356170
LIUHUA2560174
ZHANGWEI3065165
方法四:
如程序中数据集的变量之间无空格,且使height的变量值有2位小数的形式,可按如下
inputname$9.age2.weight2.height3.2;
/*或inputname$1-9age10-11weight12-13height3.2;
LIMING2356170
LIUHUA2560174
ZHANGWEI3065165
注意:
必须按照名字占够9位(位数不够输入空格),年龄占10-11列,weight占12-13列,height占14-16列来输入程序,变量之间无空格.
结果为1LIMING23561.70
2LIUHUA25601.74
3ZHANGWEI30651.65
例8.1.1建立的SAS数据集只能保存在SAS程序中.调用被保存的SAS程序,加上进行分析的程序(如描述性分析程序),形成完整的程序,再在进行统计分析计算.
(3)建立永久数据集
用Libname语句建立SAS永久数据集(name.sas7bdat),基本语句:
LibnameSAS数据库名“路径”;
/*建立数据库引用名*/
Data数据集名;
/*新建数据集名:
数据库.数据集*/
Input变量名<
;
Cards;
RUN;
例8.1.2将上例建立永久数据集保存在E:
\lixiaoyan目录下,集名examp8_1_1.sas7bdat.
程序:
LIBNAMElxy'
E:
\lixiaoyan'
/*新建立逻辑库引用名lxy,地址E:
\lixiaoyan,此地址用逻辑库名lxy代替*/
DATAlxy.Examp8_1_1;
/*建立数据集examp1_1_1,存此文件夹下,库引用名为lxy*/
LIMING235617
procprintdata=lxy.examp8_1_1;
则在E:
\lxy,生成数据集文件examp8_1_1.sas7bdat.
10重新调入数据库文件examp8_1_1.sas7bdat:
在重新打开的程序窗口输入
PROCPRINTDATA=lxy.examp8_1_1;
即可调入数据库文件examp8_1_1.sas7bdat,并在输出窗口显示刚才的结果.
20建立SAS逻辑库的方法
也可以先建好逻辑库,这样相应数据库中的数据集可以用Set命令直接调用
Set逻辑库名.数据集名;
创建逻辑库步骤:
1.在“资源管理器”(Explorer)(左边视窗)窗口中,点“逻辑库(Library)”文件夹(或点击:
查看View-资源管理器);
2.选择“文件”(Files)“新建(NEW)”,或在SAS环境窗口右击逻辑库,选择“新建”;
3.在“新建逻辑库(NEWLibrary)”窗口名称域(Names)中输入逻辑库名,如lxy.库名不超过8个字符;
4.选择引擎(Engine)类型,一般选默认即可;
5.如果希望以后SAS在启动时自动启用该逻辑库,选中“启动时启用(Enableatstartuo)”复选框;
6.“逻辑库信息”各区域中输入相应信息,路径(Path)中给出SAS文件所在路径(或点Browse找文件所在路径,找到文件夹双击);
7.单击“确定”按钮,新逻辑库出现在SAS资源管理器窗口的逻辑库中.双击逻辑库及文件名,可以显示数据集.
练习8.1利用8.1.1的数据集以建立一个名为ex8-1的SAS永久数据student.sas7bdat放在文件夹E:
\个人文件夹下.相应变量不变,增加序号ID(3位)、性别SEX,输入数据采用格式化输入height保留2位小数,姓和名之间加空格,并重新调用打印输出.
2.利用外部数据文件建立SAS数据集
(1)从外部文本文件读入数据
利用SAS处理数据,经常是从外部文本数据文件中读入数据,建立一个数据集.要求的外部数据文件必须是可以在Windows操作系统下用显示其全部内容的ASCII文件.该文件的第一行就是数据,不可以是字段名,各变量值依次存放.
可用INFILE语句将其读入并建立SAS数据集,DATA程序步的三个主要步骤为:
●启动一个数据步,命名将要创建的数据集(使用DATA语句).
●确定要读入的外部文件(使用INFILE语句).
●描述如何读入每一条记录(使用INPUT语句).
如果需要在程序中直接嵌入数据,第二步用CARDS语句代替INFILE语句.
所对应的一般程序结构如下:
/*命名所要创建的数据集名*/
INFILE‘drivelocation:
\filename’;
/*读取外部文件,drivelocationz指驱动器名及子目录名,filename是数据文件名(包含后缀)*/
/*INPUT变量1读入模式变量2读入模式,变量模式要根据数据集中格式确定相应的变量输入格式,不能有汉字*/
例8.1.3从文本文件导入数据集
有一文本文件a.txt存于E:
\lixiaoyan,内容如下:
Beijing33893519274803665567634718672
Tianjin23072335198537526355522313105
Hebei814464146129388731871434468667536
Shanxi56022829264726116327318667436985
InnerMongolia37217912647356811752512127424593
Liaoning46425860968519916984818022535586
Jilin29616990745163710110712302222302
Heilongjiang47920331554679313944118518432648
Shanghai344106474313811910177622217832
Jiangsu844494692137346535317733048882855
Zhejiang61029990486061321564919170053303
Anhui758402700105018824845122222945646
Fujian61425574965975815924216398540132
Jiangxi64229409380004919886918055743653
将此文件调入建立数据集,并打印输出.
解:
将此文件调入,并保存到如保存到E:
\lixiaoyan下,程序:
*examp8_1_3;
DATAlxy.b;
INFILE'
\lixiaoyan\a.txt'
INPUTname$ABCDEF;
PROCPRINT;
\lixiaoyan下新增文件b.sas7bdat.
如果只是建一个临时文件,前两行输入“datab;
”即可.
练习8.2文本文件E:
\个人文件夹\a.txt,将其调入建同名数据集,存放此文件夹中.
(2)从已建立的SAS数据集中读入数据
利用SET语句,可以从一个已存在的SAS数据集依次读入每一个观测.对数据做某种处理后,写入新数据集.
例如,刚才在E:
\lixiaoyan目录下,已经建立了数据集名examp8_1_1.sas7bdat,将此数据集读入建立新数据集.
LIBNAMElxy'
DATAd1;
SETlxy.Examp8_1_1;
(3)从其它数据库文件中导入数据
常用的数据管理软件将需要处理的数据录入到相应的数据库文件中,用SAS处理时,需将该数据格式的文件转换为SAS数据集.可以使用数据导入(Import)功能,实现Access、Excel、dbf等常见数据格式与SAS数据集的无缝转换.
方式一:
编程实现数据的导入导出
例8.1.4E:
\sassy中文件climate.xls中有4个变量,编程将此文件将其转换为同名SAS数据集.
*examp8_1_4;
LIBNAMEss'
\sassy'
/*引用逻辑库名ss,地址E:
\sassy*/
PROCIMPORTOUT=ss.climate/*IMPORT过程实现转换,输出的数据集名ss.climate,库ss*/
DATAFILE="
\sassy\climate.xls"
/*要导入的数据文件地址及文件名*/
DBMS=EXCELREPLACE;
/*指定要导入的数据库管理系统为Excel*/
SHEET="
Sheet1$"
/*指定电子表格中的表单为Sheet1*/
GETNAMES=YES;
/*指出第一行是否有字段名*/
方式二:
使用向导实现数据的导入和导出:
步骤:
1)进入SAS系统,单击“文件(File)”,选“导入数据(ImportData)”,启动“向导(ImportWizard)”;
2)从下拉列表选择所使用的数据源类型,如MicrosoftExcel97or2000workbook,单击“下一步(NEXT)”按钮;
3)选择数据源文件,比如“E:
\lixiaoyan\book1.xls”,单击“浏览(Browse)”,选中文件,单击“OK”按钮;
4)选择数据表的表名(数据表有三个,选取需要的,如”Sheet1$”;
5)选择建立何种数据集.确定数据集存储位置数据库(library)如lxy和数据集名(member)如c.
可事先利用LINBNAME语句建立一个逻辑库,或利用系统提供的User逻辑库,建立永久数据集.如选library为ss,成员写climate1(或从中选),单击下一步;
6)单击“完成(Finish)”,如果需要将相应的操作写为程序文件,单击“Next”按钮;
8)输入要建立的导入文件位置和文件名,单击“浏览”按钮,选择位置(如E:
\lixiaoyan)及文件名如c,产生一个程序文件c.sas,单击完成即可.这样在E:
\lixiaoyan可以看到数据集c.sas7bdat和程序文件c.sas.
再打开c.sas,就会出现如下程序:
PROCIMPORTOUT=lxy.CLIMATE1
DATAFILE="
\lixiaoyan\c.xls"
DBMS=EXCEL2000REPLACE;
SHEET="
要再次调入此数据集,键入程序:
SETlxy.c;
即可,输出结果同上.
3.利用已有的SAS数据集建立新的数据集
(1)数据集的合并
数据集的连接是把两个或两个以上的数据集的观测连接成一个新的数据集.连接的方式有二种:
串(拼)接和合并.
在SAS数据步中用SET语句可以拼接数据集,而用MERGE语句可以合并数据集.例如我们有二个数据集A和B,要拼接和合并成新的数据集C,二种不同方法的程序和结果见示意图所示:
例8.1.5两数据集的拼接
*examp8_1_5;
DataA;
Inputcommonx;
Cards;
98011
98022
98033
DataB;
98014
98025
98036
DataC;
SetAB;
Procprintdata=C;
Run;
结果输出:
Obscommonx
198011
298022
398033
498014
598025
698036
如果在“E:
\lixiaoyan”下,已经新建立了数据集,A.sas7dbat和B.sas7dbat,逻辑库如lxy已经调用(或设为永久库),则直接将A、B合并即可:
Datalxy.C;
Setlxy.Alxy.B;
Procprintdata=Gg.C;
在“E:
\lixiaoyan”下,新建了数据集,C.sas7dbat.
结果如上.
例8.1.6两数据集的合并
InputcommonY;
MERGEAB;
ObscommonxY
1980114
2980225
3980336
(2)变量值的排序
有时需要将某个名为“name”的SAS数据集中的各观测变量按某个变量的取值由小到大(数值变量)或按字母顺序(非数值变量)排序,SAS语句形式为:
PROCSORTDATA=name;
/*调用排序过程SORT*/
BYvariable;
/*按variable排序*/
例8.1.5中,按变量值common排序,程序:
……
ProcSortData=C;
Bycommon;
198011.
29801.4
398022.
49802.5
598033.
69803.6
(3)删除数据集中的某些数据行(观测向量)
DATAnewname;
SETA;
IFconditionsTHENDELETE;
例如,练习8.1在E:
\lixiaoyan建立的数据集examp8_1_1.Sas7bdat,删除第4行,程序:
Libnamess'
/*数据集所在文件夹逻辑库*/
dataaa;
setss.examp8_1_1;
If_N_=2ThenDELETE;
RUN;
ProcPRINTdata=aa;
Obsnameageweightheight
1LIMING235617
2ZHANGWEI3065165Obs
(4)删除数据集中某些变量及相应观测值
DROPX1Y1;
(或KEEPX2Y2Y3;
)
(5)产生新变量及其观测值
对一个SAS数据集,有时需要产生一个新变量和计算相应观测值.例如,SAS系统只需对变量做相应运算,即可一次性产生新变量的各个观测值.
例如,SAS数据集“OLD”中,包含变量Y1,X1和X2,有n行数据,这时要产生一个名为“NEW”的新数据集,除包含原变量及其数据外,还要包含新变量Y和X,其中Y=lnY1,X=X1*X2,且要求打印出新数据集,SAS程序如下:
DATANEW;
SETOLD;
Y=LOG(YI);
X=X1*X2;
PROCPRINTDATA=NEW;
例8.1.7在'
下,有数据文件examp8_1_1.SAS7bdat,含有变量age和weight,要在此文件夹下建立新数据集NEW,并计算y=age+weight.
LIBNAMESS'
DATASS.NEW;
/*建立新数据集*/
SETSS.exam
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验三 SAS基本内容 实验 SAS 基本 内容