第2章 数据的输入和编辑--其他常用的编辑方法
2.3 OPTIONS
OPTIONS命令的基本形式如下: OPTIONS 选择事项… ; DATA ONE; OPTIONS命令必须编到程序的DATA前面,OPTIONS有如下选择事项: -OBS= :指定SAS程序中打印观测值的容量(个数)。 -NODATE:不打印SAS程序操作日期。
-LINESIZE(或LS)=:指定打印的宽度,宽度的单位是以列为基准。LS的指定范围为64~256(列)。
-PAGESIZE(或PS)=:指定一页的打印行数。
-MISSING=:用MISSING指定的变量表示数据输入中的缺省值。
-NOCENTER:不要把分析结果打印在打印纸中央位置,而是以打印纸左侧为基准打印的意思。若不指定NOCENTER,则SAS程序自动把结果打印在中央位置。 例3-1: SAS Program
OPTIONS PS=90 LS=120 NOCENTER; DATA Simple;
INPUT X Y Z @@; CARDS;
1 2 3 4 5 6 7 8 9 10 11 12 RUN;
PROC PRINT; RUN; 2.4 IF
在SAS统计分析中,常常利用IF命令控制程序流程,对资料进行选择、判断等。IF 文件的一般形式有如下几种: DATA 资料名; INPUT variables; 1) IF SAS式; 2) IF SAS式 THEN 命令文; 3) IF SAS式 THEN 命令文; ELSE 命令文; 4) IF SAS式 THEN 命令文; ELSE IF SAS式 THEN 命令文; ELSE 命令文; 5) IF SAS式 THEN IF SAS式 THEN SAS命令文; ELSE 命令文; ELSE 命令文; CARDS; 25 54 . 87 92 . 45 78 RUN; PROC PRINT; VAR X Y; RUN;
45
例3-2: SAS Program DATA ONE; INPUT X @@;
IF X=. THEN DELETE; ←① Y=LOG(X); CARDS;
□PROGRAM解释:
IF X= . THEN DELETE: 如果变量X读到缺省值(缺省值用‘.’表示),则把缺省值从SAS DATA set中删除。
□运行结果
运行1) 没有采用[IF X= . THEN DELETE :]命令的结果。 运行2) 采用[IF X= . THEN DELETE :]命令的结果 (运行结果1) (运行结果2)
OBS X Y OBS X Y
1 25 3.21888 1 25 3.21888 2 54 3.98898 2 54 3.98898 3 · · 3 87 4.46591 4 87 4.46591 4 92 4.52179 5 92 4.52179 5 45 3.80666 6 · · 6 78 4.35671 7 45 3.80666 8 78 4.35671 例3-3:SAS Program DATA ONE; INPUT X @@;
IF X=1 THEN X=5; ELSE IF X=2 THEN X=4; ELSE IF X=4 THEN X=2; ELSE IF X=5 THEN X=1; CARDS; 1 2 3 4 5 RUN;
PROC PRINT; VAR X; RUN; □PROGRAM解释:
如果X=1,则把1换成5(X=>5),若X=2,则X=>4; 若X=4,则X=>2; 若X=5,则X=>1。即,把变量=12345转换成=54321来分析。
□运行结果:
OBS X 1 5 2 4 3 3 4 2 5 1
46
2.5 PUT 和FILE (不讲)
PUT和INPUT具有相反的功能。在SAS程序中,INPUT命令起着调入资料的作用,而PUT命令则把已编辑的SAS DATA set 输出到其他非SAS文件中。利用PUT命令,把SAS DATA set输出到其他非SAS文件时,常和FILE命令搭配使用。
INPUT PUT INFILE FILE PUT命令和INPUT命令一样,也具有多种多样的功能。其基本形式主要有如下两种。 1)INPUT–FILE.PUT型: DATA 资料名; INPUT variables @@; FILE ‘资料所在地址:资料名’; 输出部分 PUT variables 开始列 – 终止列[ .小数点以下的位置数]; RUN; 输入部分 CARDS; (直接) … … … … 2) INFIEL ·INPUT - FILE·PUT型: DATA 资料名; 输入部分 INFILE ‘资料所在地址: 资料名’; (间接) INPUT variables @@; FILE ‘A:资料名’; PUT variables 开始列 – 终止列[.小数点以下的位置数]; 输出部分 RUN; 例3-4:SAS Program DATA Simple; INPUT X Y Z @@; FILE ‘A:Mina’; PUT X Y Z; CARDS;
12 41 25 23 62 52 14 25 36 RUN; PROC PRINT; RUN; □运行结果:
OBS X Y Z 1 12 41 25 2 23 62 52 3 14 25 36
同上面的运行结果相同的内容,输出到A驱的Mina资料名下。 2.6 DO
反复计算或运行时,利用DO命令非常方便。 DO命令的基本形式有如下几种类型。 简单DO语句:
47
1)IF –DO END型 DATA 资料名; INPUT variables @@; IF SAS式THEN DO; SAS式; 例3-5: SAS Program END; CARDS; … … … … DATA ONE;
INPUT X Y Z @@;
IF X+Y>10 THEN DO; Q=’good!’; END; CARDS;
2 1 3 5 1 5 4 7 8 RUN;
PROC PRINT; RUN; □运行结果
OBS X Y Z Q 1 2 1 3 2 5 1 5
3 4 7 8 good!
2) DO-END型: DATA 资料名; INPUT variables @@; DO index variables =开始 TO 终止 BY 增加幅度; SAS式; OUTPUT;END; CARDS; … …
48
例3-6:SAS Program DATA ONE; INPUT X @@;
DO I=10 TO 30 BY 10; Y=LOG(X+I);Z=I*I; OUTPUT; END;
←每读一次X变量,内
循环(30/10)=3次
CARDS; 24 30 35 RUN;
PROC PRINT; RUN;
□运行结果: OBS X I Y Z 1 24 10 3.52636 100 2 24 20 3.78419 400 3 24 30 3.98898 900 4 30 10 3.68888 100 5 30 20 3.91202 400 6 30 30 40.9434 900 7 35 10 3.80666 100 8 35 20 4.00733 400 9 35 30 4.17439 900 2.7 ARRAAY (不讲)
ARRAY命令,可以一次处理多个数字变量或文字变量,并作排列处理。这种排列处理与变量的个数无关,但指定为同一个排列的变量的形态必须相等。
ARRAY命令的基本形式如下:
ARRAY 排列名 [ {n} ] [{*}] [排列变量]
□ARRAY a{10} a1-a10; a1,a2,…a10 排列变量被指定为a排列。 □ARRAY a{*}a1-a20; *表示可以不数变量的个数。 2.8 LABEL
因为变量名不能超过8个字母,所以人们常用简单的变量名。但在同一个程序中使用的变量较多时,其计算(分析)结果往往不容易区别各变量所代表的含义,因此需对每个变量所代表的含义加以解释。这时可利用LABEL命令。LABEL命令的基本形式如下:
DATA 资料名; INPUT variables @@;
同一个资料名 LABEL variables =‘内容’; CARDS;
…………
PROC PRINT DATA=资料名 LABEL;
RUN;
49
‘内容’不能超过40个英文字母,在一个LABEL里需要写多个连续变量时,可采用下面的形式:
LABEL score1 = ‘内容1’; LABEL score2 = ‘内容2’; 例3-7:SAS Program DATA ONE;
INPUT NAME $ X Y @@;
LABEL X=’SCORES OF MIDTERM’;← X变量代表期中考试成绩 LABEL Y=’SCORES OF FINAL’; ← Y变量代表期末考试成绩 CARDS;
LIMING 96 89 WANGYU 86 91 RUN;
PROC PRINT DATA=ONE LABEL; RUN;
□运行结果
SCORES OF SCORES OF
OBS NAME MIDTERM FINAL 1 LIMING 96 89 2 WANGYU 86 91 2.9 GO TO
GO TO 命令的一般形式如下: DATA 资料名; INPUT variables @@; IF SAS 比较运算式 THEN GO TO 移动地址; CARDS; … … … … 例 3-8:SAS Program DATA info; INPUT x y @@;
If 1<= x <= 5 THEN GO TO new ; 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;
1 2 7 6 5 3 8 5 RUN;
50
PROC PRINT; RUN; □运行结果:
OBS X Y COUNT SUMX 1 1 2 0 1 2 3 6 1 4 3 5 3 1 9 4 3 5 2 12
如果在上面的例子中count 和new之间,加上RETURN命令即, … … … count +1; RETURN;
New: sumx +x; … … …
则得到如下结果。只有当x=1~5时,运行new数学式。
OBS X Y COUNT SUMX 1 1 2 0 1 2 3 6 1 1 3 5 3 1 6 4 3 5 2 6
IF- DO型命令可以替代GO –TO 型命令。比如,上面的GO –TO 型例子也可以利用IF- DO型来完成,其结果完全一致。
累加语句:
一般格式:累加变量+表达式,如N+1、sumx+x、x1+x2 累加语句就是把表达式的计算结果加到累加变量上,作为累加变量新的观测值存到程序中。
累加变量必须是数值型的,且第一个观测值被读入前自动地赋值为0。表达式中可以包含SAS操作符,用来执行基本运算,还可以包含SAS函数,用来进行一些数学运算、计算统计量等。
2.10 STOP
在输入DATA时,对不必要的DATA可用STOP命令停止输入(运行)。其基本形式如下: DATA 资料名; INPUT variables @@; IF SAS比较运算式 THEN STOP; CARDS; … … …
51
例3-9:SAS Program DATA mina; INPUT x y @@;
IF _n_>5 THEN STOP;← 当观测值的序号大于5时,停止运行(读数据)。 CARDS;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 RUN;
PROC PRINT; RUN; □运行结果:
OBS X Y 1 1 2 2 3 4 3 5 6 4 7 8 5 9 10
n代表观测值的序号(即前n个观测值)。根据IF _n_>5 THEN STOP;在12个观测值中只输入5个观测值。
2.11 DELETE和MISSING命令 1)DELETE命令
DELETE具有删除的功能。在DATA set中,由于缺省值或奇异值等影响统计分析结果的DATA存在,常利用DELETE命令把这些DATA从DATA set中删除。通常DELETE命令和IF命令一起使用。DELETE命令的一般形式如下: DATA 资料名; INPUT variables @@; IF SAS比较运算式 THEN DELETE; CARDS; … … … DATA ONE; INPUT X @@; IF X>95 THEN DELETE; CARDS; 85 89 98 93 95 34 100 251 RUN; PROC PRINT; RUN; (SAS运行结果) OBS X 1 85 2 89 3 93 4 95 5 34 52
例3-10: SAS程序 2)MISSING 命令
在统计分析中由于主观上的遗漏或者客观上很难观测等原因,常常遇到缺省值。在SAS分析程序中,我们常常利用MISSING命令来处理这些缺省值。其一般形式如下:
DATA 资料名; INPUT variables @@; MISSING 文字; CARDS; … … … 在SAS分析程序中,对观测值的缺省值有多种处理方法。一般来说,观测值的缺省 值用小数点‘.’来表示。例如,IF X=0 THEN X=‘.’;但有时MISSING命令也可以用英文字母表示。
例3-11:
DATA Simple; INPUT X Y Z @@; MISSING A B; CARDS;
12 A 41 25 B 23 62 B 52 14 25 A 36 RUN;
PROC PRINT; RUN; □运行结果
OBS X Y Z 1 12 A 41 2 25 B 23 3 62 B 52 4 14 25 A 3.10 LIST
在LOG视窗中打印时,常常利用LIST命令。这和PROC PRINT在OUTPUT视窗上打印计算结果的功能很相似。
例3-12:SAS Program DATA mina; INPUT x y; LIST x y;
CARDS; … … …
2.12 FORMAT和INFORMAT 需要确定资料的位数时,利用FORMAT命令。FORMAT可以和其他SAS命令一起使用,比如PROC FORMAT。FORMAT命令也可单独使用,其基本形式如下
53
DATA 资料名; FORMAT VARIABLES N.n; INPUT variables @@; N:表示包括小数点的变量值VARIABLES的位数。 n:小数点后面保留的位数。
例如,FORMAT mina 5.2; 变量mina为5位数(保留5位数),小数点以下保留2位数。输入资料的过程中需要确定资料的位数时,利用INFORMAT命令。其基本形式如下:
DATA 资料名; INFORMAT variables $ N.; ← ① INPUT variables $ @@; ← ② PROGRAM解释
①variables $ 表示一个或多个文字变量,N.表示文字变量的长短,比如,当N.=4.时,只输入4个文字。
②variables $ 表示一个或多个文字变量,但已在INFORMAT表示过变量是文字变量(INFORMAT variables $),所以INPUT中不表示文字变量也可以。即INPUT variables @@;
例3-13:SAS Program DATA ONE;
INFORMAT X Y $ 5.; INPUT X Y @@; CARDS;
TIANJIN CHONGQING BIJING SHANGHAI RUN;
PROC PRINT; RUN;
□运行结果
OBS X Y 1 TIANJ CHONG 2 BEIJI SHANG 2.13 OUTPUT
OUTPUT命令规定sas系统输出当前的观测值到指定的资料名中。一般格式: OUTPUT 〈数据集名1〉…… 〈数据集名n〉; 54
output后的括号中的数据集名是可选项,当没有该选项时,sas系统把当前这个观测值输出到DATA语句命名的所有的数据集上,并返回到data步开始接着处理下一个观测值。当有该选项时,sas系统把当前的这个观测值输出到output语句规定的所有数据集上,并返回到data步开始接着处理下一个观测值,这里的数据集名可以多于一个,但必须在data语句中已被命名。
□ OUPUT
利用OUTPUT可以把多个变量的DATA set转换成单一变量的DATA set。这种方法在方差分析,t-检验等统计分析中得到广泛的应用。
例3-14: 把具有3个SCORE1 SCORE2 SCORE3变量的DATA set转换成只具有一个变量SCORE的DATA set1。
SAS PROGRAME: DATA sample;
INPUT name $ score1-score3 @@; DROP score1-score3;
score=score1; OUTPUT; score=score2; OUTPUT; score=score3; OUTPUT; CARDS;
wang 90 68 78 zhang 92 78 65 gong 89 65 98
A set OBS NAME SCORE1 SCORE2 SCORE3 1 wang 90 68 78 2 zhang 92 78 65 3 gong 89 65 98 RUN;
PROC PRINT; RUN;
利用上面的SAS程序,就可以把具有3个SCORE3变量的DATA set转换成只具有一个SCORE变量的DATA set1。
□IF-OUTPUT
利用IF-OUTPUT可以把单一的DATA set转换成两个或两个以上的不同的DATA set。 例:把DATA sample转换成3个sample1, sample2, sample3不同的DATA set。
□SAS PROGRAME:
DATA sample1 sample2 sample3; INPUT name $ score1-score3 @@;
55
DATA set1 OBS NAME SCORE 1 wang 90 2 wang 68 3 wang 78 4 zhang 92 5 zhang 78 6 zhang 65 7 gong 89 8 gong 65 9 gong 98
IF name=’wang’ THEN output sample1; IF name=’zhang’ THEN output sample2; IF name=’gong’ THEN output sample3; CARDS;
wang 90 68 78 zhang 92 78 65 gong 89 65 98 RUN;
PROC PRINT data= sample1; RUN; PROC PRINT data= sample2; RUN; PROC PRINT data= sample3; RUN DATA sample1 OBS NAME SCORE1 SCORE2 SCORE3 DATA sample 1 wang 90 68 78 OBS NAME SCORE1 SCORE2 SCORE3 DATA sample2 1 wang 90 68 78 OBS NAME SCORE1 SCORE2 SCORE3 2 zhang 92 78 65 1 zhang 92 78 65 3 gong 89 65 98 DATA sample3 OBS NAME SCORE1 SCORE2 SCORE3 1 gong 89 65 98 利用上面的SAS程序,就可以把单一的DATA set转换成3个不同的DATA set。 □DO-OUTPUT
输入资料时,为了减少不必要的资料的输入,常常OUTPUT和DO命令搭配使用。 例3-15:设有5种土质不同的耕地(a1,a2,a3,a4,a5)和4种不同的种子(b1, b2,b3,b4)。现做试验,如何搭配土地和种子生产量最多?
DATA sample;
INPTUT ground $ seed $ y @@; CARDS;
a1 b1 25 a1 b2 30 a1 b3 24 a1 b4 28 a2 b1 27 a2 b2 46 a2 b3 50 a2 b4 54 a3 b1 36 a3 b2 54 a3 b3 56 a3 b4 57 a4 b1 37 a4 b2 55 a4 b3 57 a4 b4 51 a5 b1 34 a5 b2 59 a5 b3 58 a5 b4 58 RUN;
PROC PRINT; RUN;
上面的SAS程序中CARDS命令下面,变量a和b重复过多,不易输入。但利用DO和OUTPUT命令就可以解决因重复使用同样的变量带来的麻烦。
DATA sample;
DO ground =‘a1’,‘a2’,‘a3’,‘a4’,‘a5’; DO seed =‘b1’,‘b2’,‘b3’,‘b4’; INPUT y @@; OUTPUT; 内循环 外循环 END; END; CARDS;
25 30 24 28 27 46 50 54 36 54 56 57 37 55 57 51 34 59 58 58 RUN;
PROC PRINT; RUN;
56
上面程序中OUTPUT命令的作用是,每当读一个产量y时,强制性的打印代表土质(ground)和种子(seed)种类的文字变量a和b。本程序的外循环由5个变量组成,内循环由4个变量组成。所以,外循环共循环5次,并且每循环一次,内循环要循环4次。
□运行结果
OBS ground seed y
1 a1 b1 25 2 a1 b2 30 3 a1 b3 24 4 a1 b4 28
… … … … …
17 a5 b1 34 18 a5 b2 59 19 a5 b3 58 20 a5 b4 58
以上讨论的2个程序得到同样的结果。但后者由于利用了OUTPUT命令,所以SAS运行程序比前者简单多了。在资料的处理过程中利用DO-OUTPUT非常方便,下面进一步讨论有关DO-OUTPUT的应用技巧。掌握这些技巧有助于编辑相关分析等统计研究的SAS程序。
57
因篇幅问题不能全部显示,请点此查看更多更全内容