热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

chap4过程步基础

1print过程procprint<data数据集名><选项>;*label指定打印输出标签noobs制定不显示观测序号*by变量名1<

1 print过程
proc print <data=数据集名> <选项>;/*label指定打印输出标签 noobs制定不显示观测序号*/
by 变量名1<变量名2>;
footnote<n> <'footnote'>;
format 变量名1 输出格式名;
id 变量名1<变量名2>;
label 变量名='标签名';
pageby 变量名;
sum 变量名1<变量名2>;
sumby 变量名1<变量名2>;
title<n> <'标题内容'>;
var 变量名1<变量名2>;
where 条件语句
run;

2 means过程
proc means <data=数据集名> <选项><统计关键量>;
/*noprint 禁止统计报告输出到output,maxdec=n指定列表输出的最大小数位数;常用统计关键字,如max min sum
var 变量名1<变量名2>;
by 变量名1<变量名2>;
class 变量名1<变量名2>;
freq <变量名>;
weight <变量名>;
id 变量名1<变量名2>;
output <out=数据集名 > 关键字=<新变量名列>;
run;

3 copy过程

复制一个逻辑库下所有数据集到另一个逻辑库下或者一个文件复制到另一个文件
move 选择指定在成功复制到输出库out=指定逻辑库后,从源逻辑库中删除已经复制的成员
select 选择复制的数据集名,exclude排除不需要复制的数据集名
select和exclude不能同时出现,功能相反

proc copy in=源逻辑库名 out=目标逻辑库名  >;
select 成员名 ;
exclude 成员名 ;
run;

libname jx 'd:\jx';/*创建源逻辑库*/
libname sy 'd:\test';/*创建目标逻辑库*/
data jx.stu;input id name $ class;
cards;
1001 高兴 1
1002 你好 1
;
run;
data jx.stu2;input id name $ class;
cards;
1001 董好 2
1002 刘小名 2
;
run;
/*调用copy过程复制数据集到目标逻辑库*/
PROC copy in=jx out=sy move;
/*in=指定源逻辑库名,out=目标逻辑库名,move选择指定复制成功从源逻辑库删除复制的数据集*/
select stu stu2;
/*选择复制的数据集名*/
run;

4 sql过程

实现了关系数据库的结构化查询功能,体现了sas对大型数据库管理系统通用的sql语言支持

proc sql  <选项>;
/*print打印到输出窗口;noprint ;number对输出观测指定行号;nonumber;inobs=指定输入的观测记录行数outobs=;loops=指定sql过程内循环的最大次数 */
数据操纵语句;
quit;
DATA stu_score;
input id name $ chinese math english;
cards;
1001 高兴 58 78 90
1002 马小名 78 38 88
1003 刘小华 89 90 87
1004 董下小 60 80 52
1005 杨小名 38 45 51
1006 张与信 99 89 87
;
RUN;
/*调用sql过程,通过case when语句实现*/
PROC sql;
select name as 姓名,(case when chinese>=80 then '优秀'
when chinese>=60 then '及格'
else '不及格' end) as 语文,
(case when math>=80 then '优秀'
when math>=60 then '及格'
else '不及格' end) as 数学,
(case when english>=80 then '优秀'
when english>=60 then '及格'
else '不及格' end) as 英语
from stu_score;
QUIT;
/*羽毛球比赛结果数据集ym*/
DATA ym;
length sj $10.;
input dm $ sj $ jg $;
cards;
金羽 2012-05-01
金羽 2012-05-01
金羽 2012-05-01
金羽 2012-05-01
金羽 2012-05-02
飞翔 2012-05-02
飞翔 2012-05-02
飞翔 2012-05-02
;
RUN;
/*调用SQL过程*/
PROC sql;
select dm as 队名,sj as 日期, sum(case when jg='胜' then 1 else 0 end) '胜',sum(case when jg='负' then 1 else 0 end) '负' from ym
group by dm,sj
order by dm desc,sj asc;

QUIT;

5 report过程

制作报表的工具,将print、means、tabulate过程的特点与data步报告写法的特点结合起来组合成一个强大的生成报表的工具
headline 指定表头划线 headskip 指定空一行column 指定报表显示列 define 对报表显示列定义属性
compute 指定计算列

libname re 'd:\jx';
data re.house;
input city $ hb_index same_index def_index;
cards;
北京 99.9 100.3 102.4
天津 99.8 100.2 103.1
秦皇岛 99.8 100.5 106.3
石家庄 99.7 101.3 107.7
包头 99.8 100.0 103.9
太原 100.0 100.9 101.7
;
RUN;
proc print data=re.house;
run;
/*调用report过程生成报表*/
PROC report data=re.house headline headskip;
title '六个大中城市住宅销售价格指数 (2012年2月)';
title2 '单月城市销售价格';
column city hb_index same_index def_index dif;
define city /order format=$6. hljs-number">6 '城市';
define hb_index/display format=5.1 hljs-number">5 '环比';
define same_index/display format=5.1 hljs-number">5 '同比';
define def_index/display format=5.1 hljs-number">5 '定基';
define dif/computed format=5.1 hljs-number">5 '差比';
compute dif ;
dif=same_index-hb_index;
endcomp;
RUN;

6 freq过程

计数资料的统计推断,主要两个目的:一是描述分析产生频数和列联表,可简单描述数据;二是统计推断,产生各种统计量,可分析变量间关系,freq可以创建单向频数表,双向和n向交叉表
exact 指定精确测试 tables:若没有这个语句,freq对数据集中每个变量都成圣一个单向频数表

proc freq <选项>;
by 变量名1<变量名2>;
footnote<n> <'footnote'>;
exact 统计选项计算选项>;
output <out=数据集名>选项;
tables requests 选项>;
test 选项;
weight 变量名选项>;
run;

7 summary过程

对数值变量计算单个变量的基本统计量,使用语句与means过程类似

8 compare过程

比较两个数据集内容

9 datasets过程

对sas逻辑库中的sas文件进行列表、复制、换名、添加和删除等操作

10 surverselect抽样过程

常用的抽样有单纯随机抽样(simple random sampling)系统抽样(systematic sampling)分层抽样(stratified sampling) srs sys urs
method= 指定抽样方法,samprate=指定抽样比例,seed=n指定随机数 strata 指定分层变量

 DATA  sj ;
Do i = 1 to 10000 ;
output ;
end ;
RUN;
/*随机抽样 从一万个样本中按随机数100抽取数据*/
PROC surveyselect
data =sj
method = srs
n = 100
out=cysj seed =100;
RUN;
PROC surveyselect
data =sj
method = srs
samprate=0.2
out=cysj2 seed =100;
RUN;

11 format过程

定义数值或者符号文字的输出和输入格式,定义好的变量类型可以在数据步直接引用
value 定义输出格式 invalue 定义输入格式 picture 给出定义的图示输出格式 select 选择给出的输入\输出格式的目录子集

/*format过程定义card_type类型*/
PROC format;
value card_type
1001='普卡'
1002='金卡'
1003='白金卡'
1004='国航联名卡'
1005='标白卡';
RUN;
DATA card;
input id bh;
cards;
1001 345
1002 456
1003 870
1004 987
1005 876
;
RUN;
/*数据集card引用format过程定义的类型card_type*/
DATA trans_card;
set card;
idbh=put(id,card_type.);/*引用card_type类型*/
RUN;
/*打印输出结果,查看数据集*/
PROC PRINT DATA=trans_card;
RUN;
PROC format;
value scor_desc 0-<60='不及格'
60-<80='良好'
other='优秀';
RUN;
DATA stu_score;
input id name $ score;
cards;
1001 高宏 58
1002 马小名 60
1003 刘晓华 80
1004 董青青 90
1005 杨峰 78
;
RUN;
/*打印过程调用format过程定义的类型,通过foramt语句引用类型*/
PROC PRINT DATA=stu_score;
format score scor_desc.;/*format语句引用format过程定义的类型*/
RUN;

12 sort过程

将数据集中某一个变量或几个变量按升序或降序重新排列并把结果存储到输出数据集中
noduprecs 删除重复的记录,发生在排序后 nodupkey 删除重复的by变量记录,发生在排序中,
datecopy暴力数据集创建或修改日期force 强制排序选项

/*SORT过程通过noduprecs 去除完全相同的记录,结果输出到数据集stu_order*/
PROC sort data=stu out=stu_order noduprecs ;
by name;
RUN;
/*SORT过程通过noduprecs 去除姓名相同的记录,并按姓名降序排列,结果输出到数据集stu_order*/
PROC sort data=stu out=st_order nodupkey ;
by descending name;
RUN;
/*农产品经济指数统计,agri_Proc为上涨率*/
DATA ecnomic;
input y_moth $ agri_pro;
cards;
201201 2.3
201202 3.1
201203 2.9
201204 3.2
201205 2.8
;
RUN;
DATA analy;
set ecnomic;
cz=agri_pro-lag(agri_pro);/*求出每条记录比上月的差值*/
RUN;
PROC means data=analy;
var cz;
RUN;

推荐阅读
author-avatar
HuPangpang_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有