SAS编程法总结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.3 SAS数据集整理
• 例1-6 已知数据集chap1.A,将其转臵为新数据集chap1.TA,并且将原数据 集中的变量name变为course、列变量改为学生姓名。
proc transpose data=chap1.A out=chap1.TA name=course; /*将数据集chap1.A转置为新数据集chap1.TA,变量名name改 为course*/ var statistics chinese; /*指定转置变量*/ id name; run; name LR HW YJ SJ statistics 89 78 85 91 chinese 92 89 76 87 course statistics chinese LR 89 92 HW 78 89 YJ 85 76 SJ 91 87
1.3 SAS数据集整理
• 在SAS数据集中可使用IF –THEN语句实现筛选观测。
格Hale Waihona Puke Baidu一:IF 条件表达式 THEN;
格式二:IF 条件表达式 THEN SAS语句; <ELSE SAS语句 >;
1.3 SAS数据集整理
• 例1-2 根据下表抽查的某班8个学生的体检结果新建数据集chap1.example1_2, 并实现如下操作:
1.3 SAS数据集整理
• 输出结果:
1.3 SAS数据集整理
(4)数据集纵向连接 数据集纵向连接指几个数据集中的数据纵向相加连接为一个新的数据集。 此操作在DATA步中用SET命令实现。 • Set命令语法格式: set 数据集名称1 数据集名称2…数据集名称n;
例1-4 若已存在数据集chap1.A、 chap1.B、 chap1.C
例2-1 新建包含变量x和y的数据集chap2.example2_1,x取 5~30的5的倍数,y为x的自然对数值,且y的取值小于3。 /*方法一:DO循环结合LEAVE语句*/ data chap2.example2_1; do x=5 to 30 by 5; /*设臵x的起始值为5,终止值为30, 步长为5*/ y=log(x); if y>3 then leave; output; format y 8.5; 点占5位*/ end; /*取y值为x的自然对数*/ /*若y的值大于3则结束循环*/ /*定义y的输出形式为总长度为8位,小数 /*结束循环*/
• 语法格式
merge 数据集名称1 数据集名称2…数据集名称n;
[BY <变量1> [<变量2>…]];
1.3 SAS数据集整理
• 例1-5 若已存在数据集chap1.C和数据集chap1.D,将它们 按照name横向连接成数据集chap1.CD。 数据集chap1.C
name LJ YH statistics 89 78 English 83 80
• 例1-3 将数据集chap1.example1_2对学生按其BMI的值降序排列,并另存为数 据集chap1.example1_3。
proc sort data=chap1.example1_2 out=chap1.example1_3; /*对数据集chap1.example1_2排序,将结果另存为 chap1.example1_3*/ by descending BMI; /*按照BMI的值降序排列,若需要升序排列则将descending 改写成ascending*/ run; proc print data=chap1.example1_3; run;
(1)将数据集 和chap1.B纵向连接成数据集chap1.AB data chap1.A chap1.AB; (2)将数据集 run; chap1.A和chap1.C纵向连接成数据集chap1.AC
set chap1.A chap1.B; /*合并数据集chap1.A和chap1.B*/
data chap1.AC; set chap1.A chap1.C; /*合并数据集chap1.A和chap1.C*/ run;
1.3 SAS数据集整理
• 方法一:编写程序
libname chap1 'E:\data\chap1'; /*新建指向路径为“E:\data\chap1”的逻辑库 chap1*/ data chap1.example1_1; /*新建永久SAS数据集chap1.example1*/ /*定义变 input ID $1-4 name $5-11 Type$13-19 birth YYMMDD8. +1 N; 量输入格式*/ cards; 0101 张 三 0102 李 四 0103 王 五 ; proc print; format birth YYMMDD8.; run; /*设置变量birth的输出格式*/ 金 银 卡 64/10/06 20 卡 82/09/16 13
1.3 SAS数据集整理
(3)对数据集排序 数据集的排序可应用 SORT过程编程实现 。
PROC SORT <选项>;
BY <DESCENDING> 变量名; RUN;
• 注意: DESCENDING选项只对随后的一个变量起作用。如果省略DESCENDING指 令,系统默认升序排列。
1.3 SAS数据集整理
• 筛选变量可使用Keep\Drop语句,Keep语句用来指定需要保留的变量; Drop语句用来被指定被删除的变量。
• 注意:在一个程序里,不能同时使用Keep\Drop语句。
KEEP语句格式1:KEEP 变量1 变量2 …变量N;
KEEP语句格式2:DATA=数据集名称(KEEP=变量1 变量2 …变量N); DROP语句格式1:DROP变量1 变量2 …变量N; DROP语句格式2:DATA=数据集D名称(DROP=变量1 变量2 …变量N);
数据集chap1.D
name HL LJ YH chinese 92 78 89
1.3 SAS数据集整理
proc sort data=chap1.C out=chap1.C; by name; run; proc sort data=chap1.D out=chap1.D; by name; run; /*以上对数据集chap1.C和chap1.D按照关键变量name升序排列*/ data chap1.CD; merge chap1.C chap1.D; /*横向合并数据集chap1.C和chap1.D*/ by name; /*设置关键变量为id*/ run;
1.3 SAS数据集整理
/*解答问题A*/ data chap1.example1_2; set chap1.example1_2; BMI=weight/(height**2); /*根据公式计算BMI*/ run; /*解答问题B*/ data chap1.example1_2; set chap1.example1_2; keep ID sex BMI; /*此行也可改写为drop name weight height;*/ run; /*解答问题C*/ data chap1.example1_2; set chap1.example1_2; if BMI>18 && BMI<25; /*保留BMI在18至25之间的观测*/ run;
1.3 SAS数据集整理
(5)数据集横向合并 • 数据集横向合并是指通过使用Merge语句把两个及两个以上数据集中的两条 或两条以上的观测合并为新数据集中的一条观测。它主要分为一对一合并 和匹配合并。
• 一对一合并指把一个数据集的第k条观测同另一个数 据集中的第k条观测合并,如果相应的某个数据集已 没有观测,则相应的变量值为默认值。 • 匹配合并与一对一合并最主要的区别在于它按照相同 的关键变量合并,合并前必须把每个数据集根据关键 变量排序。
普通卡 87/01/27 5 /*输入数据*/
1.3 SAS数据集整理
• 提交后,在Output输出记录窗口显示
• 同时,在新建的逻辑库chap1中,出现了 数据集example1_1
1.3 SAS数据集整理
注意: • 日期格式的变量在SAS中默认保存为从1960年1月 1日至某日期的天数,如1964年10月6日,默认输 出为1740。在打印输出日期格式的变量时,为了 得到特定格式,务必使用format语句指定输出格 式。 • 而SAS数据集中,可在Column Attributes,单击弹 出的对话框中的format后的 按钮,选择设臵变 量的输出格式。
1.3 SAS数据集整理
• 方法二:Viewtable 新建数据集
• 步骤一:打开新表 Tools|Table Editor • 步骤二:定义变量 Column Attributes • 步骤三:输入数据、保存数据集
1.3 SAS数据集整理
(2)在数据集中增加、筛选变量和观测 • 在DATA步中可以直接利用新建变量语句来产生新变量。
1.3 SAS数据集整理
(6)数据集转臵
• TRANSPOSE过程语法格式:
PROC TRANSPOSE <<DATA=输入数据集 OUT=转臵数据 集><选项列表>; VAR 变量列表; ID 变量; COPY 变量列表; RUN;
说明:用户可自设转臵变量名的方法有: (1)通过PROC TRANSPOSE 语句的选项OLDNAME=NEWNAME将原数据 集中的变量名改为新变量NEWNAME。 (2)通过选项prefix=NO,修改默认的新变量名COL1、COL2 、COL3为NO1、 NO2、NO3。 (3)用ID命令定义原数据集中某一变量的对应取值来代替新变量名称COL1、 COL2、COL3 。
2.2 数据步中基本语言介绍
/*方法二:DO循环结合CONTINUE语句*/
2.2 数据步中基本语言介绍
data chap2.example2_1b; do x=5 to 30 by 5; /*设臵x的起始值为5,终止值为30, 步长为5*/ y=log(x); /*取y值为x的自然对数*/ if y>3 then continue; output; format y 8.5; 点占5位*/ end; /*若y的值大于3则跳出循环*/
SAS编程法汇总
1.3 SAS数据集整理
(1)新建数据集
DATA步 Viewtable输入法
编号 姓名 持卡类型 出生年月 消费次 例1-1 根据下表所示信息新建数据集 chap1.example1_1 (ID) (name) (Type ) (birth) 。 数 (N) 0101 0102 0103 张三 李四 王五 金卡 银卡 消费卡 64/10/06 82/09/16 87/01/27 20 13 5
(1)根据身高和体重计算每位学生的体重指数(BMI),已知体重指数等于体重(单位 为kg)除以身高(单位为m)的平方。 (2)仅保留学生姓名、BMI和性别。 (3)仅保留体重指数处在正常范围的学生信息(18<BMI<25)。 ID name sex weight height 01 姚籽萱 女 50.5 1.63 02 徐若黛 女 51 1.53 03 张 林 男 60 1.72 04 谢欣然 女 62 1.7 05 夏 天 女 54 1.67 06 刘子然 男 70 1.8 07 赵 赵 男 65 1.75 08 章 峰 男 84 1.68
example1_6
2.2.3 2.2 循环语句 数据步中基本语言介绍
在实际应用中,当需要建立符合特定需求的SAS数据集时, 将用到SAS循环控制语句。 1.DO循环 DO 计数变量=起始值 TO 结束值 BY 步长;
循环体…; END; • 在循环体中可以用LEAVE语句来跳出循环,使用 CONTINUE 语句结束本轮循环,调整计数变量进行下一轮 循环。
1.3 SAS数据集整理
data chap1.example1_2; input ID $1-2 name $3-10 sex$11-12 +1 weight +1 height; cards; 01 姚籽萱 女 50.5 1.63 02 徐若黛 女 51 1.53 03 张 林 男 60 1.72 04 谢欣然 女 62 1.70 05 夏 天 女 54 1.67 06 刘子然 男 70 1.80 07 赵 赵 男 65 1.75 08 章 峰 男 84 1.68 ; run; /*以上程序新建了包含了表格的数据集 chap2.example1_2*/
相关文档
最新文档