第3章 其他常用SAS命令.docx
- 文档编号:8219135
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:17
- 大小:155.04KB
第3章 其他常用SAS命令.docx
《第3章 其他常用SAS命令.docx》由会员分享,可在线阅读,更多相关《第3章 其他常用SAS命令.docx(17页珍藏版)》请在冰豆网上搜索。
第3章其他常用SAS命令
第3章其他常用的SAS命令
3.1OPTIONS
OPTIONS命令的基本形式如下:
OPTIONS选择事项…;
DATAONE;
OPTIONS命令必须编到程序的DATA前面,OPTIONS有如下选择事项:
-OBS=:
指定SAS程序中打印观测值的容量(个数)。
-NODATE:
不打印SAS程序操作日期。
-LINESIZE(或LS)=:
指定打印的宽度,宽度的单位是以列为基准。
LS的指定范围为64~256(列)。
-PAGESIZE(或PS)=:
指定一页的打印行数。
-MISSING=:
用MISSING指定的变量表示数据输入中的缺省值。
-NOCENTER:
不要把分析结果打印在打印纸中央位置,而是以打印纸左侧为基准打印的意思。
若不指定NOCENTER,则SAS程序自动把结果打印在中央位置。
例3-1:
SASProgram
OPTIONSPS=90LS=120NOCENTER;
DATASimple;
INPUTXYZ@@;
CARDS;
123456789101112
RUN;
PROCPRINT;RUN;
3.2IF
在SAS统计分析中,常常利用IF命令控制程序流程,对资料进行选择、判断等。
IF文件的一般形式有如下几种:
DATA资料名;
INPUTvariables;
1)IFSAS式;
2)IFSAS式THEN命令文;
3)IFSAS式THEN命令文;
ELSE命令文;
4)IFSAS式THEN命令文;
ELSEIFSAS式THEN命令文;
ELSE命令文;
5)IFSAS式THENIFSAS式THENSAS命令文;
ELSE命令文;
ELSE命令文;
CARDS;
例3-2:
SASProgram
DATAONE;
INPUTX@@;
IFX=.THENDELETE;←①
Y=LOG(X);
CARDS;
2554.8792.4578
RUN;
PROCPRINT;VARXY;RUN;
□PROGRAM解释:
IFX=.THENDELETE:
如果变量X读到缺省值(缺省值用‘.’表示),则把缺省值从SASDATAset中删除。
□运行结果
运行1)没有采用[IFX=.THENDELETE:
]命令的结果。
运行2)采用[IFX=.THENDELETE:
]命令的结果
(运行结果1)(运行结果2)
OBSXYOBSXY
1253.218881253.21888
2543.988982543.98898
3··3874.46591
4874.465914924.52179
5924.521795453.80666
6··6784.35671
7453.80666
8784.35671
例3-3:
SASProgram
DATAONE;
INPUTX@@;
IFX=1THENX=5;ELSEIFX=2THENX=4;ELSEIFX=4THENX=2;
ELSEIFX=5THENX=1;
CARDS;
12345
RUN;
PROCPRINT;VARX;RUN;
□PROGRAM解释:
如果X=1,则把1换成5(X=>5),若X=2,则X=>4;若X=4,则X=>2;若X=5,则X=>1。
即,把变量=12345转换成=54321来分析。
□运行结果:
OBSX
15
24
33
42
51
3.3PUT和FILE(不讲)
PUT和INPUT具有相反的功能。
在SAS程序中,INPUT命令起着调入资料的作用,而PUT命令则把已编辑的SASDATAset输出到其他非SAS文件中。
利用PUT命令,把SASDATAset输出到其他非SAS文件时,常和FILE命令搭配使用。
INPUTPUTINFILEFILE
PUT命令和INPUT命令一样,也具有多种多样的功能。
其基本形式主要有如下两种。
例3-4:
SASProgram
DATASimple;
INPUTXYZ@@;
FILE‘A:
Mina’;
PUTXYZ;
CARDS;
124125236252142536
RUN;PROCPRINT;RUN;
□运行结果:
OBSXYZ
1124125
2236252
3142536
同上面的运行结果相同的内容,输出到A驱的Mina资料名下。
3.4DO
反复计算或运行时,利用DO命令非常方便。
DO命令的基本形式有如下几种类型。
简单DO语句:
1)IF–DOEND型
DATA资料名;
INPUTvariables@@;
IFSAS式THENDO;
SAS式;
END;
CARDS;…………
例3-5:
SASProgram
DATAONE;
INPUTXYZ@@;
IFX+Y>10THENDO;Q=’good!
’;END;
CARDS;
213515478
RUN;
PROCPRINT;RUN;
□运行结果
OBSXYZQ
1213
2515
3478good!
2)DO-END型:
DATA资料名;
INPUTvariables@@;
DOindexvariables=开始TO终止BY增加幅度;
SAS式;OUTPUT;END;
CARDS;……
例3-6:
SASProgram
DATAONE;
INPUTX@@;
←每读一次X变量,内循环(30/10)=3次
DOI=10TO30BY10;
Y=LOG(X+I);Z=I*I;
OUTPUT;END;
CARDS;
243035
RUN;
PROCPRINT;RUN;
□运行结果:
OBSXIYZ
124103.52636100
224203.78419400
324303.98898900
430103.68888100
530203.91202400
6303040.9434900
735103.80666100
835204.00733400
935304.17439900
3.5ARRAAY(不讲)
ARRAY命令,可以一次处理多个数字变量或文字变量,并作排列处理。
这种排列处理与变量的个数无关,但指定为同一个排列的变量的形态必须相等。
ARRAY命令的基本形式如下:
ARRAY排列名[{n}][{*}][排列变量]
□ARRAYa{10}a1-a10;a1,a2,…a10排列变量被指定为a排列。
□ARRAYa{*}a1-a20;*表示可以不数变量的个数。
3.6LABEL
因为变量名不能超过8个字母,所以人们常用简单的变量名。
但在同一个程序中使用的变量较多时,其计算(分析)结果往往不容易区别各变量所代表的含义,因此需对每个变量所代表的含义加以解释。
这时可利用LABEL命令。
LABEL命令的基本形式如下:
‘内容’不能超过40个英文字母,在一个LABEL里需要写多个连续变量时,可采用下面的形式:
LABELscore1=‘内容1’;
LABELscore2=‘内容2’;
例3-7:
SASProgram
DATAONE;
INPUTNAME$XY@@;
LABELX=’SCORESOFMIDTERM’;←X变量代表期中考试成绩
LABELY=’SCORESOFFINAL’;←Y变量代表期末考试成绩
CARDS;
LIMING9689WANGYU8691
RUN;
PROCPRINTDATA=ONELABEL;
RUN;
□运行结果
SCORESOFSCORESOF
OBSNAMEMIDTERMFINAL
1LIMING9689
2WANGYU8691
3.7GOTO
GOTO命令的一般形式如下:
DATA资料名;
INPUTvariables@@;
IFSAS比较运算式THENGOTO移动地址;
CARDS;…………
例3-8:
SASProgram
DATAinfo;
INPUTxy@@;
If1<=x<=5THENGOTOnew;
x=3;←①
若满足IF条件,则运行new;若不满足IF条件,则把x值改为3(即x=3。
)
count+1;
count+1:
累计大于5的观测值x(x>5)的个数。
new:
sumx+x;←②
new:
sumx+x:
累计x值(ΣXi)。
CARDS;
12765385
RUN;
PROCPRINT;RUN;
□运行结果:
OBSXYCOUNTSUMX
11201
23614
35319
435212
如果在上面的例子中count和new之间,加上RETURN命令即,
………
count+1;
RETURN;
New:
sumx+x;
………
则得到如下结果。
只有当x=1~5时,运行new数学式。
OBSXYCOUNTSUMX
11201
23611
35316
43526
IF-DO型命令可以替代GO–TO型命令。
比如,上面的GO–TO型例子也可以利用IF-DO型来完成,其结果完全一致。
累加语句:
一般格式:
累加变量+表达式,如N+1、sumx+x、x1+x2
累加语句就是把表达式的计算结果加到累加变量上,作为累加变量新的观测值存到程序中。
累加变量必须是数值型的,且第一个观测值被读入前自动地赋值为0。
表达式中可以包含SAS操作符,用来执行基本运算,还可以包含SAS函数,用来进行一些数学运算、计算统计量等。
3.8STOP
在输入DATA时,对不必要的DATA可用STOP命令停止输入(运行)。
其基本形式如下:
DATA资料名;
INPUTvariables@@;
IFSAS比较运算式THENSTOP;
CARDS;………
例3-9:
SASProgram
DATAmina;
INPUTxy@@;
IF_n_>5THENSTOP;←当观测值的序号大于5时,停止运行(读数据)。
CARDS;
123456789101112131415161718192021222324
RUN;
PROCPRINT;RUN;
□运行结果:
OBSXY
112
234
356
478
5910
n代表观测值的序号(即前n个观测值)。
根据IF_n_>5THENSTOP;在12个观测值中只输入5个观测值。
3.9DELETE和MISSING命令
1)DELETE命令
DELETE具有删除的功能。
在DATAset中,由于缺省值或奇异值等影响统计分析结果的DATA存在,常利用DELETE命令把这些DATA从DATAset中删除。
通常DELETE命令和IF命令一起使用。
DELETE命令的一般形式如下:
DATA资料名;
INPUTvariables@@;
IFSAS比较运算式THENDELETE;
CARDS;………
例3-10:
SAS程序
2)MISSING命令
在统计分析中由于主观上的遗漏或者客观上很难观测等原因,常常遇到缺省值。
在SAS分析程序中,我们常常利用MISSING命令来处理这些缺省值。
其一般形式如下:
DATA资料名;
INPUTvariables@@;
MISSING文字;
CARDS;………
在SAS分析程序中,对观测值的缺省值有多种处理方法。
一般来说,观测值的缺省值用小数点‘.’来表示。
例如,IFX=0THENX=‘.’;但有时MISSING命令也可以用英文字母表示。
例3-11:
DATASimple;
INPUTXYZ@@;
MISSINGAB;
CARDS;
12A4125B2362B521425A36
RUN;
PROCPRINT;RUN;
□运行结果
OBSXYZ
112A41
225B23
362B52
41425A
3.10LIST
在LOG视窗中打印时,常常利用LIST命令。
这和PROCPRINT在OUTPUT视窗上打印计算结果的功能很相似。
例3-12:
SASProgram
DATAmina;
INPUTxy;
LISTxy;
CARDS;………
3.11FORMAT和INFORMAT
需要确定资料的位数时,利用FORMAT命令。
FORMAT可以和其他SAS命令一起使用,比如PROCFORMAT。
FORMAT命令也可单独使用,其基本形式如下:
DATA资料名;
FORMATVARIABLESN.n;
INPUTvariables@@;
N:
表示包括小数点的变量值VARIABLES的位数。
n:
小数点后面保留的位数。
例如,FORMATmina5.2;变量mina为5位数(保留5位数),小数点以下保留2位数。
输入资料的过程中需要确定资料的位数时,利用INFORMAT命令。
其基本形式如下:
DATA资料名;
INFORMATvariables$N.;←①
INPUTvariables$@@;←②
☐PROGRAM解释
①variables$表示一个或多个文字变量,N.表示文字变量的长短,比如,当N.=4.时,只输入4个文字。
②variables$表示一个或多个文字变量,但已在INFORMAT表示过变量是文字变量(INFORMATvariables$),所以INPUT中不表示文字变量也可以。
即INPUTvariables@@;
例3-13:
SASProgram
DATAONE;
INFORMATXY$5.;
INPUTXY@@;
CARDS;
TIANJINCHONGQINGBIJINGSHANGHAI
RUN;
PROCPRINT;
RUN;
□运行结果
OBSXY
1TIANJCHONG
2BEIJISHANG
3.12OUTPUT
OUTPUT命令规定sas系统输出当前的观测值到指定的资料名中。
一般格式:
OUTPUT〈数据集名1〉……〈数据集名n〉;
output后的括号中的数据集名是可选项,当没有该选项时,sas系统把当前这个观测值输出到DATA语句命名的所有的数据集上,并返回到data步开始接着处理下一个观测值。
当有该选项时,sas系统把当前的这个观测值输出到output语句规定的所有数据集上,并返回到data步开始接着处理下一个观测值,这里的数据集名可以多于一个,但必须在data语句中已被命名。
□OUPUT
利用OUTPUT可以把多个变量的DATAset转换成单一变量的DATAset。
这种方法在方差分析,t-检验等统计分析中得到广泛的应用。
例3-14:
把具有3个SCORE1SCORE2SCORE3变量的DATAset转换成只具有一个变量SCORE的DATAset1。
SASPROGRAME:
DATAsample;
INPUTname$score1-score3@@;
DROPscore1-score3;
score=score1;OUTPUT;score=score2;OUTPUT;score=score3;OUTPUT;
CARDS;
wang906878zhang927865gong896598
RUN;
PROCPRINT;RUN;
利用上面的SAS程序,就可以把具有3个SCORE3变量的DATAset转换成只具有一个SCORE变量的DATAset1。
□IF-OUTPUT
利用IF-OUTPUT可以把单一的DATAset转换成两个或两个以上的不同的DATAset。
例:
把DATAsample转换成3个sample1,sample2,sample3不同的DATAset。
□SASPROGRAME:
DATAsample1sample2sample3;
INPUTname$score1-score3@@;
IFname=’wang’THENoutputsample1;
IFname=’zhang’THENoutputsample2;
IFname=’gong’THENoutputsample3;
CARDS;
wang906878zhang927865gong896598
RUN;
PROCPRINTdata=sample1;RUN;
PROCPRINTdata=sample2;RUN;
PROCPRINTdata=sample3;RUN;
利用上面的SAS程序,就可以把单一的DATAset转换成3个不同的DATAset。
□DO-OUTPUT
输入资料时,为了减少不必要的资料的输入,常常OUTPUT和DO命令搭配使用。
例3-15:
设有5种土质不同的耕地(a1,a2,a3,a4,a5)和4种不同的种子(b1,b2,b3,b4)。
现做试验,如何搭配土地和种子生产量最多?
DATAsample;
INPTUTground$seed$y@@;
CARDS;
a1b125a1b230a1b324a1b428a2b127a2b246a2b350
a2b454a3b136a3b254a3b356a3b457a4b137a4b255
a4b357a4b451a5b134a5b259a5b358a5b458
RUN;
PROCPRINT;RUN;
上面的SAS程序中CARDS命令下面,变量a和b重复过多,不易输入。
但利用DO和OUTPUT命令就可以解决因重复使用同样的变量带来的麻烦。
DATAsample;
DOground=‘a1’,‘a2’,‘a3’,‘a4’,‘a5’;
DOseed=‘b1’,‘b2’,‘b3’,‘b4’;
INPUTy@@;
OUTPUT;
END;
END;
CARDS;
2530242827465054365456573755575134595858
RUN;
PROCPRINT;RUN;
上面程序中OUTPUT命令的作用是,每当读一个产量y时,强制性的打印代表土质(ground)和种子(seed)种类的文字变量a和b。
本程序的外循环由5个变量组成,内循环由4个变量组成。
所以,外循环共循环5次,并且每循环一次,内循环要循环4次。
□运行结果
OBSgroundseedy
1a1b125
2a1b230
3a1b324
4a1b428
……………
17a5b134
18a5b259
19a5b358
20a5b458
以上讨论的2个程序得到同样的结果。
但后者由于利用了OUTPUT命令,所以SAS运行程序比前者简单多了。
在资料的处理过程中利用DO-OUTPUT非常方便,下面进一步讨论有关DO-OUTPUT的应用技巧。
掌握这些技巧有助于编辑相关分析等统计研究的SAS程序。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第3章 其他常用SAS命令 其他 常用 SAS 命令