您的当前位置:首页数据的输入和编辑-其他常用的编辑方法

数据的输入和编辑-其他常用的编辑方法

2021-06-30 来源:爱问旅游网


第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

因篇幅问题不能全部显示,请点此查看更多更全内容