循环嵌套

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在SAS系统中为一个统一的逻辑标记。 •临时库:名为WORK,它在每次启动SAS后自动生 成,结束SAS后库中的数据自动删除。 •永久库:使用LIBNAME语句指定永久库的库标记, 永久库中的所有文件将被保留 。
启动SAS时,SAS自动指定两个库标记: SASUSER:永久库,不必用LIBNAME指定。 WORK:临时库,可省略库标记(缺省数据库)。
建立永久数据集:将数据集存盘 数据排序:SORT过程,将数据集中数据排序 数据集连接:SET语句,多数据集纵向连接 数据集合并:MERGE语句,多数据集横向合并 其他常用语句:PUT、FILE、OUTPUT SAS文件管理命令及过程
5.1 建立永久SAS数据集
•数据库:存储在一个目录下的许多文件组成。 •库标记(一级名):是SAS文件的物理存储位置(目录)。
SAS 使 用 SORT 过 程 对 数 据 集 中 的数据进行排序。
SORT过程使用如下二个语句:
– PROC SORT 语句 – BY 语句
5.2 数据排序
5.2.1 PROC SORT 语句
格式: PROC SORT [选择项]; PROC SORT语句的选择项有二个:
– DATA=规定用于排序的数据集。 – OUT= 结果数据集的名称,缺省(即省略
如果表达式为真(非零且不缺项),SAS系统 继续为正在建立的观测值执行DATA 步中的语句。 如果表达式的值是假(0或缺项),SAS系统马上返 回到DATA步的开始,去进行另一次执行而不输 出上一个观测值。
如: IF SEX=‘F’; 等同于(IF SEX=‘M’ THEN DELETE; 在结果数据集中所包含的仅仅是SEX的值 为‘F’的那些观测值。
PROC SORT DATA=D1 OUT=SORTD1;
BY DEP;
PROC SORT DAT来自百度文库=D2 OUT=SORTD2;
BY DEP;
DATA D1D2;
SET SORTD1 SORTD2;
BY DEP;
5.5 数据集合并
MERGE语句将两个或多个SAS数据集中的观测值 合并成一个新数据集中的单个的观测值。
永久数据集的扩展名
•SAS数据集文件的扩展名为.SD2,图标 为: 。
•在同一个LIBNAME语句中可定义多个 库标记。
LIBNAME LA ‘A:’ LC ‘C:\’;
永久数据集的调用
•调用永久数据集: •LIBNAME LA ‘A:’; •PROC PRINT DATA= LA.AA;
5.2 数据排序
– LIBNAME PAN ‘D:\PANYAN’; – LIBNAME LA ‘A:’;
5.1.2 DATA语句
建立永久数据集: • 用LIBNAME语句指定SAS库标记。 • 在DATA语句中写出一级和二级名(用.分隔) 例:LIBNAME LA ’A:’;
DATA LA.AA; …… LIBNAME PAN ‘D:\PANYAN’; DATA PAN.ABC; ……
4.5.2求子集的IF语句
DATA A ;
INPUT NAME$ SEX$ @@;
CARDS;
ZHANG F LI M SUN F WANG F LIU M ZHAO M
PROC PRINT; RUN;
DATA B; SET A; IF SEX='F'; PROC PRINT; RUN;
第五章 SAS文件操作
4.4 循环
• 双重循环(循环嵌套):
DO…;
DO…;
…… ……
内 循 环
外 循 环
END;
END;
• 双重循环(循环嵌套): DATA _NULL_;
DO I=1 TO 9; DO J=1 TO I; X=I*J; PUT @(J*5) X @; END; PUT;
END; RUN;
4.4 循环
格式:MERGE 数据集表; “横向合并”
5.5.1 一对一合并
不用BY语句时,MERGE 语句是将按观测的序 号进行合并。新数据集中观测值数为 MERGE语句 中所列出的各数据集中观测值数的最大者。如果某 个数据集的观测值用完,则该数据集观测值各变量 的值由缺项值代替。
如果一个变量在多个数据集中出现,则在新的 数据集中,该变量名只出现一次。且该变量的值为 在MERGE语句中列在最右边的有相应变量数据集 中的值。
●子集IF语句,无THEN子句。用来使SAS 系统继续处理那些满足IF 子句中条件的观 测值。
IF-THEN/ELSE语句
格式:
IF expression THEN statement;
<ELSE statement;>
说明:
SAS系统首先对跟在IF后的表达式(expression)求值, 如果结果为真(非零),则执行THEN后的语句。如果为假, 则去执行ELSE后面的语句,如果没有ELSE子句,则执行下 一个语句。
4.4 循环
DATA _NULL_; DO I=1 TO 9; DO J=1 TO I; X =I*J; PUT J 1. '*' I 1. '=' END; PUT; END;
RUN;
X 2. +2 @;
4.5 其它程序设计中常用语句
4.5.1 DELETE 语句
格式:DELETE; DELETE语句告诉SAS系统停止处理当
OUT=选择项),则复盖原数据集。
5.2 数据排序
5.2.2 BY 语句
格式: BY [DESCENDING] 变量 ... ; BY语句指出用以排序的变量名。
• 如果需要按BY变量值降序排列,则在变量名前 要用DESCENDING指出。 • 如BY语句中给出多个变量,则先按前一变量值 进行分组,在各组中再按后一变量值排序。
举例:
DATA CS1; SET SCORE; DROP NUM; RUN; DATA TWO; SET CS1 CS2; PROC PRINT; RUN;
举例:
5.4.3 交叉连接
如果两个数据集D1和D2已经按DEP值排过序,在连 接两数据集时想将有相同DEP值的数据连在一起, 可使用BY语句进行交叉连接。 例如:
例: data score; input class num sex$ s1-s3 @@; total=sum(of s1-s3); cards; 1 1001 m 79 96 87 1 1002 f 69 78 92 2 1003 f 68 87 93 1 1004 m 88 93 90 2 1005 m 76 89 88 run;
PROC SORT DATA=SCORE OUT=CS2; BY CLASS ; PROC PRINT;
RUN;
PROC SORT DATA=SCORE OUT=CS2; BY CLASS DESCENDING TOTAL; PROC PRINT;
RUN;
5.4 数据集连接
SET语句可以将两个或更多的数据集连在一起,形 成一个单独的大的数据集。“纵向连接”
label: 标识GOTO目标的语句标号。
4.3 RETURN语句
格式:RETURN; RETURN语句的功能是将当前观测值输
出到数据集,然后立即将程序流程返回 DATA步的开始处,而不执行其后的语句。
GO TO语句经常被DO-END语句代替。
4.4 循环
在数据步的一次执行中反复地执行某一 部分语句,这种程序的反复执行称为循环。
一对一合并举例
data student; input num name $ sex$; cards; 89100 lanyin f 89101 hanyang m 89102 sunlin f 89103 zhangli m
data test; input t1-t3; cards; 89 76 90 78 88 74 96 98 92 data studtest; merge student test; proc print; run;
5.5.2 匹配合并
为实现匹配合并,对于所有要合并的数据集要求它 们至少有一个变量是相同的,并且每个数据集都应 按该变量排过序。BY语句被用来标识匹配变量。
1. 对匹配变量的处理(BY变量)
匹配合并操作将从观测值具有当前BY值的每一个数 据集中合并所有数据。
当一个输入数据集用尽一个BY组中的观测值时, 在该BY组中的最后一个观测的值被保留且用来同其 它数据集的该BY组中的剩余观测值的值合并。如果 一个输入数据集不包括某一BY组中的任何观测值, 则该数据集提供缺项值给新数据集。
第四章、第五章
第四章 数据步程序设计
数据步的程序代码一般都是顺序执行, 然而,数据步中有一些控制语句,如分支、 循环语句,可控制程序的执行流程。
IF DO … END GOTO RETURN
4.1 IF 语句
两种IF语句:
● 条 件 IF 语 句 , 带 有 一 个 THEN 子 句 和 ELSE子句(可选)。只对满足IF语句中所 指 定 条 件 的 观 测 值 才 执 行 SAS 语 句 。 如 果 THEN子句不被执行,那么可选择的ELSE 子句给出另一种替换作用。
注意: 在THEN之后只允许使用一个语句,如果要执行几个
语句,则应用DO-END把要同时执行的几个语句用括起来。 IF-THEN/ELSE 语句可以嵌套 。
4.2 GO TO (GOTO)语句
格式:
GOTO label;
或 GO TO label;
说明:
GO TO (或者GOTO)语句告诉SAS系统,立即 跳向在GOTO语句中指出的语句, 并从那一点开始 接着执行。GO TO语句和跳向的目标都必须在一个 DATA步中,跳向的目标语句由GO TO语句和目标 语句中的标号来标明。
前的观测值, 且该观测值不被写入正在建立 的数据集中,SAS系统返回DATA步的开始处 进行下一次执行。
4.5.2求子集的IF语句
格式: • IF expression; • 使用求子集IF语句,使SAS系统仅继续处
理符合IF语句条件规定的观测值, 因而 所得到的数据集是原数据集的子集。
4.5.2求子集的IF语句
建立永久数据集的关键语句
• LIBNAME语句
• DATA 语句
建立永久数据集与建立临时数据集所用的 语句基本相同,除上述二语句之外,其余语 句的用法与作用均不变。
5.1.1 LIBNAME语句
格式:LIBNAME 库标记 ’目录’; 例:LIBNAME LC ’C:\EXERCISE’;
库标记:可任意起名,目录必须用引号括起 来。
匹配合并举例
• data test; • input num t1-t3; • cards; • 89100 89 76 90 • 89102 78 88 74 • 89103 96 98 92 • proc sort data=student; • by num; • proc sort data=test; • by num;
格式:SET 数据集名 …; 5.4.1 变量相同
新数据集的变量即原数据集的变量,观测值个数是 各个数据集中观测值个数的和。
5.4.2 变量不同
新数据集将包括所有的变量。从某个数据集获得的 观测值中,对于该数据集中没有的变量将用缺项值
填充。
DATA TWO; SET SCORE CS2; PROC PRINT; RUN;
4.4 循环
如果仅有初值,则直到一个语句指示 跳出循环体才停止循环。如果初值终值均 未规定,语句组执行一次。如果未规定增 量,增量的缺省值为1。初值和终值是在第 一次执行循环以前计算的。
4.4 循环
DATA _NULL_; DO I=1 TO 10; PUT I=; END; RUN; • PUT语句中变量名后面使用等号,是对 输出值用变量名来标识。称为命名输出。 • 如:PUT I=;
DATA _NULL_;
I=1; K: PUT I; I=I+1; IF I<=10 THEN GOTO K; RUN;
DO I=1 TO 10; PUT I; END;
4.4 循环
•循环语句的格式: • DO 指针变量=初值 TO 终值 BY 增量; • END ; •说明:
DO语句组第一次执行时,指针变量等于 初值。当终值和增量都存在时,则每执行到 END 语句时, 指针变量+增量作为新的指针变量,并 与终值作比较,直到指针变量的值变化超过终值 时才停止执行DO语句组。最后一次执行完后,指 针变量值超过终值。
相关文档
最新文档