char07Word文档格式.docx
- 文档编号:17884125
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:15
- 大小:19.80KB
char07Word文档格式.docx
《char07Word文档格式.docx》由会员分享,可在线阅读,更多相关《char07Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
上面两段程序等价。
例7.5表达式SUMX+X*X把X*X的结果加到SUMX上。
dataa(keep=dateuss);
setfdata.r_day;
uss+r600600**2;
/*USS为变量r600600的平方和*/
例7.6计算非缺失值的观测个数。
dataa(keep=nmis);
setfdata.indcls;
nmis+sector^=’‘;
例中,NMIS为变量SECTOR非缺失值的观测个数,即按SECTOR分好类股票的个数。
例7.7删除部分观测值。
ifsex=’F’thendelete;
例中,删除数据集FDATA中SEX=F的观测值。
例7.8清空数据集。
seta;
delete;
例中,删除数据集A中的所有观测值,即清空数据集A。
设计复杂程序时,常会用到DELETE语句的这种用法。
例7.9每个数据行都有一个同值的识别变量。
inputid1-3reject#2idc1-3pass;
ifidneidcthendo;
put‘数据行错误’id=idc=;
lostcard;
end;
cards;
30132
30161432
30253
30283171
40092845
41146
41199551
title2‘每个观测包含两个数据行’;
例中,二个输入数据行组成一个观测。
每行的1-3列包含一个识别数字。
当变量id所在的数据行的识别数字不等于变量idc所在数据行的识别数字时,说明有一个数据行被丢失或遗漏了,这时通过PUT语句输出信息并执行LOSTCARD语句。
此例中第三个观测(idc=400)的第一个数据行(即id变量所在的行)丢失了。
例7.10每个观测包含3个数据行。
inputid1x$#2id2y$#3id3z$;
ifid1neid2orid2neid3thenlostcard;
101A
102B
103C
104D
105E
title‘每个观测包含3个数据行’;
例中,DATA步读3个数据行作为1个观测。
第1个观测有2个丢失记录,第2个观测有1个丢失记录,第4个观测丢失2个记录。
只有第3和第5个观测是完整的观测。
LOG窗口显示的信息:
NOTE:
LOSTCARD.
RULE:
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0
5101A
6102B
7102B
8103C
9103C
11104D
12105E
13105E
数据集WORK.A有2个观测和6个变量。
例7.11停止处理DATA步。
dataB_shares;
infile"
d:
\fdata\B_shares.txt"
firstobs=2;
inputhstocd$shrsdtshrout;
formathstocd$8.shrsdtyymmdd10.shrout16.;
informathstocd$8.shrsdtyymmdd10.shrout16.;
if_n_=21thenstop;
/*OUTPUT窗口照常打印数据集列表*/
上面程序也可以用下面一段程序替代:
\fdata\B_shares.txt"
firstobs=2obs=21;
例中,STOP语句不影响后面任意DATA或PROC的执行。
在STOP语句之后继续执行出现的DATA或PROC语句。
例7.12ABORT语句防止输入无效数据时出错。
inputssnpay;
if_error_thenabort;
111100
aaa200
444300
例中,如果数据行出错,自动变量_error_置为1。
如果发现错误,SAS停止处理这些观测。
例中,第二个数据行变量ssn包含了无效数据(aaa)。
当SAS读这个数据行时,它置_error_为1并执行abort语句。
上面数据集只有一个观测。
例7.13控制选择观测时的应用。
don=3,5,7,4;
setfdata.classpoint=n;
if_error_=1thenabort;
aaa=_error_;
output;
stop;
例7.14BETWEEN-AND算符和ISMISSING|ISNULL算符例句。
Wherehstocdbetween600000and600899;
Wheretaxesbetweensalary*0.30andsalary*0.50;
Wheretaxesnotbetweensalary*0.30andsalary*0.50;
Whereidnumismissing;
/*计算缺失值数目*/
Wherenameisnull;
LIKE算符的两个特殊模式:
•百分号(%)可以替代任意多个字符;
•下划线(_)正好有一个字符与之匹配。
进行比较时,LIKE算符识别大写和小写之间的字符。
例7.15设有名字Diana,Diane,Dianna,Dianthus,Dyan.使用LIKE算符来选择第一个字符为D的名字时,LIKE算符的不同选择模式与结果如下。
Like‘D_an’;
/*选择Dyan*/
Like‘D__an_’;
/*没有名子被选上*/
Like‘D_an__’;
/*Diana,Diane,Dianna,Dyan*/
Like‘D_an%’;
/*上述列表的所有名字*/
Notlike‘D_an%’;
实现程序:
data;
setfdata.wherelike;
wherenameLike'
D_an'
putname;
D__an_'
D_an__'
D_an%'
wherenameNotlike'
例7.16使用算符SAME-AND来增加较多的从句到程序中已有的WHERE语句后面,而不需要重新打入原来的从句。
procgplotdata=fdata.a1a0001;
plotclpr*date=1;
whereyear(date)>
1996;
wheresameandyear(date)<
2000;
quit;
例7.17选择数值变量非0和非缺失的观测值。
Wherex;
Wherexandy;
Wherex/y;
例7.18选择字符变量非缺失的观测。
Wherec^=’’;
wherecisnotmissing;
字符变量C不能单独地作为逻辑表达式。
例7.19选择一定范围内的观测。
Wherexbetween1and5;
where1<
=x<
=5;
例7.20选择其中一个观测。
Wherexin(1,2,3,4,5);
例7.21不能用WHERE语句的情况。
setfdata.a000001;
where_n_<
1000;
/*错误语句,必须用if*/
if_n_<
例中,不能用WHERE语句控制SAS的自动变量时。
例7.22由一个输入数据行创建多个观测。
dataA;
inputID$score1-score3;
dropscore1-score3;
score=score1;
output;
score=score2;
score=score3;
02126999694
02128899088
例中,每一行记录生成三个观测。
每个新观测将包括代号ID和一次测验值SCORE.
例7.23一个DATA步创建多个数据集。
dataFM;
ifsex=’F’thenoutputF;
elseifsex=’M’thenoutputM;
例中,一个DATA步创建两个数据集。
数据集F包含变量SEX为’F’的所有观测;
数据集M包含变量SEX不是’F’的所有观测。
例7.24一个DATA步创建多个数据集。
dataage1age2;
inputname$age;
ifage<
15thenoutputage1;
elseoutputage2;
Alice13
Gail14
Mary15
Sandy11
Philip16
Robert12
Thomas11
William15
数据集AGE1包含变量AGE<
15的所有观测,数据集AGE2包含变量AGE>
=15的所有观测。
例7.25由几个记录组合信息。
procsortdata=fdata.dd_c;
bydate;
setfdata.dd_c;
iffirst.datethensum_c=0;
sum_c+sum;
keepdatesum_c;
iflast.datethenoutput;
例中,对数据集计算1999年活期每日存款总额。
这样的方法是不是简单快捷。
这个例子很有用,从这里也认识了自动变量:
first.date和last.date的使用方法。
数据处理时用这个语句会很省力。
例7.26上例可以用MEANS过程来实现。
procmeansdata=fdata.dd_cnoprint;
varsum;
outputout=sumsum=sum_c;
例7.27从某个SAS数据集中移走一个观测。
datafdata.accounts;
inputacctnumcredit;
10011500
10024900
10033000
datafdata.Accounts;
modifyfdata.Accounts;
ifacctnum=1002thenremove;
/*移走acctnum=1002的观测*/
procprintdata=fdata.Accounts;
title’EditedDataSet’;
例7.28应用举例。
datamaster;
inputname$id$phonenum;
Kevin11001003750066
Sandi110000013756666
Cindy110000026758966
Jim110000036750088
datatrans;
.110010083750066
.1100000183756666
Vivan2100000183750387
modifymastertrans;
byid;
if_iorc_=%sysrc(_sok)thenreplace;
/*在master中找到观测进行替代*/
elseif_iorc_=%sysrc(_dsenmr)thendo;
error=0;
_iorc_=0;
procprintdata=master;
title'
含有新电话号码的数据集MASTER'
例中,用数据集TRANS中的值更新数据集MASTER中的电话号码,增加一个观测到数据集MASTER的结尾。
SYSRC对MASTER每次试图重新得到一个_IORC_的值,自动调用宏检验。
例7.29规定缺失值字符。
dataperiod_a;
missingXI;
inputId$4.Foodpr1Foodpr2Foodpr3Coffeem1Coffeem2;
datalines;
10011154565I78
10028627557286
10049352X7688
1015733543112108
1027101127397679
;
例中,MISSING语句规定用字符X和I表示缺失值。
如果不用MISSING语句,当读入数值变量的缺失值时(这里为X和I),就要产生错误。
例7.30用INPUT语句读入可疑数据行时使用LIST语句。
inputxy;
ifx<
0thenlist;
26
42
-12
-46
例7.31产生声音。
data_null_;
callsound(20,800);
/*每秒产生20次声音,每次时间为800*1/80秒*/
例中,频率为20,即每秒发生20次。
持续时间为800*1/80秒。
例7.32创建包含DATA信息的宏变量。
callsymput(‘text1’,‘march’);
/*将march赋给宏变量text1*/
callsymput(‘beta’,100);
/*将100赋给宏变量beta*/
procregdata=fdata.r_monthoutest=estnoprint;
modelr600600=rm;
dataest;
setest;
callsymput(‘beta01’,intercept);
/*创建一个值来自DATA步的宏变量beta01*/
callsymput(‘beta11’,rm);
/*创建一个值来自DATA步的宏变量beta11*/
callsymput(‘sigma1’,_rmse_);
例7.33发布操作系统命令。
callsystem('
dir*.sas'
);
/*发布和操作系统命令dir*.sas*/
例7.34空语句表示数据行结束。
inputxyz;
ifx=.Thengotofind;
list;
find:
dropx;
125
.13
258
.39
在这个DATA步,CARDS语句告诉SAS系统在这个作业流中,紧跟着的是数据行,当SAS遇到空语句(;
)时,就知道数据行结束了。
上例中的空语句也可以省略,因数据行后面第一个语句(PROCPRINT;
)中包含一个分号。
例7.35应用举例。
inputname$type$age;
iftype='
teen'
&
age>
19thenerror'
typeandagedon"
tmacth'
age=;
Wuteen20
Liteen12
Cindyadult28
19thendo;
put'
_error_=1;
上面两段程序的结果相同。
第一段用ERROR语句,第二段用PUT和_ERROR_语句。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- char07